C# 如何按WebClient或HttpClient发布产品列表,以及如何为其指定WebAPI控制器?

C# 如何按WebClient或HttpClient发布产品列表,以及如何为其指定WebAPI控制器?,c#,list,http-post,webclient,asp.net-web-api,C#,List,Http Post,Webclient,Asp.net Web Api,我有WebAPI控制器的方法: [HttpPost] public void ChangeProducts(List<Product> products) { // ... } 或通过HttpClient: using (var hc = new HttpClient()) { var val = JsonConvert.SerializeObject(products);

我有WebAPI控制器的方法:

    [HttpPost]
    public void ChangeProducts(List<Product> products)
    {
        // ...
    }
或通过HttpClient:

        using (var hc = new HttpClient())
        {
            var val = JsonConvert.SerializeObject(products);

            hc.BaseAddress = new Uri(_orderServiceUrl);
            hc.DefaultRequestHeaders.Add("Accept", "application/json");
            HttpResponseMessage r = hc.PostAsync(_orderServiceUrl, new StringContent(val)).Result;
        }
但在控制器中,列表为空,不为空,但没有项


为什么?我找到了解决办法。它的工作原理是:

using (var hc = new HttpClient())
{
    hc.BaseAddress = new Uri(_orderServiceUrl);
    hc.DefaultRequestHeaders.Accept.Clear();
    hc.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

    HttpResponseMessage response = hc.PostAsJsonAsync("", products).Result;
}

你确定你的列表包含元素吗?@YuvalItzchakov,是的。有元素。请添加产品类的声明并向我们显示生成的JSON{CurrencyCode:null,DeliveryKey:X:1:2:1:23,预计发货日期:2014-11-22T12:10:27.2342536Z,保证发货日期:2014-10-23T12:10:27.2342536Z,报价:A0041:JS:HINO:AFL,订单ID:828,价格:316.9100,数量:1,数量批次:0,数量单位:null,SellerOrderKey:null,状态:NotAddedInBasket,状态注释:null,用户ID:2}它是JSON,与模型的属性名称相同。不要使用Task.Result。这可能会导致死锁。请使用WebClient.Tnx查看同步api,但它就是一个例子。我使用异步/等待方法。
using (var hc = new HttpClient())
{
    hc.BaseAddress = new Uri(_orderServiceUrl);
    hc.DefaultRequestHeaders.Accept.Clear();
    hc.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

    HttpResponseMessage response = hc.PostAsJsonAsync("", products).Result;
}