4

如何使用 HttpClient 调用具有多个参数的 Post 方法?

我正在使用带有单个参数的以下代码:

var paymentServicePostClient = new HttpClient();
paymentServicePostClient.BaseAddress = 
                  new Uri(ConfigurationManager.AppSettings["PaymentServiceUri"]);

PaymentReceipt payData = SetPostParameter(card);
var paymentServiceResponse = 
   paymentServicePostClient.PostAsJsonAsync("api/billpayment/", payData).Result;

我需要添加另一个参数 userid。如何将参数与“postData”一起发送?

WebApi POST 方法原型:

public int Post(PaymentReceipt paymentReceipt,string userid)
4

3 回答 3

8

只需在包含这两个属性的 Web Api 控制器上使用视图模型。所以而不是:

public HttpresponseMessage Post(PaymentReceipt model, int userid)
{
    ...
}

利用:

public HttpresponseMessage Post(PaymentReceiptViewModel model)
{
    ...
}

PaymentReceiptViewModel显然将包含该属性userid。然后就可以正常调用该方法了:

var model = new PaymentReceiptViewModel()
model.PayData = ...
model.UserId = ...
var paymentServiceResponse = paymentServicePostClient
    .PostAsJsonAsync("api/billpayment/", model)
    .Result;
于 2013-02-28T11:51:26.730 回答
6

UserId应该在查询字符串中:

var paymentServiceResponse = paymentServicePostClient
                            .PostAsJsonAsync("api/billpayment?userId=" + userId.ToString(), payData)
                            .Result;
于 2013-02-28T12:00:17.173 回答
5

在我的情况下,我现有的 ViewModel 与我想要发布到我的 WebAPI 的数据并没有很好地对齐。因此,我没有创建一组全新的模型类,而是发布了一个匿名类型,并让我的 Controller 接受一个动态的。

var paymentServiceResponse = paymentServicePostClient.PostAsJsonAsync("api/billpayment/", new { payData, userid }).Result;



public int Post([FromBody]dynamic model)
{
    PaymentReceipt paymentReceipt = (PaymentReceipt)model.paymentReceipt;
    string userid = (string)model.userid;

    ...

}

(我很想听听关于这种方法的一些反馈。它的代码肯定少了很多。)

于 2014-08-19T12:01:13.483 回答