2016-02-11 29 views
13

HttpClientを使用してWeb APIにPOSTしようとしています。 Web APIのSaveメソッドにブレークポイントを設定すると、[FromBody] Productはnullになります。これは、Web APIに製品を投稿する方法に何か問題があることを意味します。誰かが下のコードを見て、どこが間違っているのか見てください。私はそれがヘッダーとコンテンツの種類と関係があると想定しています。HttpClientとWeb APIメソッド[FromBody]パラメータを使用してWeb APIにポストするとnullになる

JSONとしてを通して製品オブジェクトを渡す必要がウェブAPIへのクライアントリポジトリからPOSTコール:

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]製品の商品パラメータがnullになる

+0

私が使用して文の中でのHttpClientをラップしないことをお勧めしますでしょうhttps://aspnetmonsters.com/2016/08/2016-08-27-httpclientwrong/を見ます – Xander

答えて

22

あなたはフィドラーのようなものでリクエストを検査しようとしましたか?あなたが指摘したように、content-typeはapplication/jsonにする必要があります。しかし、受け入れるヘッダーのみを設定しています。

試してみてください。

StringContent content = new StringContent(JsonConvert.SerializeObject(product), Encoding.UTF8, "application/json"); 
関連する問題