2016-02-11 98 views
13

我正在嘗試使用HttpClient發佈到Web API。當我在Web API的Save方法中放置斷點時,[FromBody]產品爲空。這意味着我將產品發佈到Web API的方式出了問題。有人可以看看下面的代碼,看看我可能會出錯的地方。我假設這是與標題和內容類型有關。使用HttpClient和Web API方法發佈到Web API [FromBody]參數結束爲空

從客戶端庫到Web API

POST調用,它應該通過的產物,JSON對象通過:

public async Task<Product> SaveProduct(Product product) 
{ 
    using (var client = new HttpClient()) 
    { 
     client.BaseAddress = new Uri("http://localhost:99999/"); 
     client.DefaultRequestHeaders.Accept.Clear(); 
     client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 

     StringContent content = new StringContent(JsonConvert.SerializeObject(product)); 
     // HTTP POST 
     HttpResponseMessage response = await client.PostAsync("api/products/save", content); 
     if (response.IsSuccessStatusCode) 
     { 
      string data = await response.Content.ReadAsStringAsync(); 
      product = JsonConvert.DeserializeObject<Product>(data); 
     } 
    } 
    return product; 
} 

網頁API控制器的方法:

[HttpPost] 
[Route("save")] 
public IActionResult Save([FromBody]Product product) 
{ 
    if (customer == null) 
    { 
     return HttpBadRequest(); 
    } 
    _manager.SaveCustomer(product); 
    return CreatedAtRoute("Get", new { controller = "Product", id = product.Id }, product); 
} 

[FromBody]產品產品參數結束爲空。

+0

,我會建議不換的HttpClient在using語句看到https://aspnetmonsters.com/2016/08/2016-08-27-httpclientwrong/ – Xander

回答

22

您是否嘗試過在提琴手之類的東西中檢查請求?正如你所指出的,它需要內容類型爲application/json。但你只是設置接受標題。

嘗試:

StringContent content = new StringContent(JsonConvert.SerializeObject(product), Encoding.UTF8, "application/json");