2016-02-11 17 views
13

nolu olmak üzere sona eriyor HttpClient kullanarak bir Web API'sine POST yapmaya çalışıyorum. Web API'sinin Kaydetme yönteminde bir kesme noktası koyduğumda [FromBody] Ürünü boş. Bu, ürünü Web API'sine gönderdiğim yolla ilgili bir sorun olduğu anlamına gelir. Birisi aşağıdaki kodu inceleyebilir ve nerede yanlış gidebileceğimi görebilir. Başlıkları ve içerik türleriyle ilgili bir şey olduğunu varsayarak düşünüyorum.HttpClient ve Web API yöntemini kullanarak bir Web API'sine gönderme [FromBody] parametresi,

ürün geçmesi gerekir web API bir istemci deposundan

SONRASI arama JSON ile nesne:

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; 
} 

Web API Kontrol: Yöntem

[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] Ürün ürün parametresi null olarak biter.

+0

Ben kullanarak deyimi bakın https://aspnetmonsters.com/2016/08/2016-08-27-httpclientwrong/ içinde HttpClient sarma DEĞİL öneriyoruz – Xander

cevap

22

Talebin fiddler gibi bir şeyde incelenmesini denediniz mi? İşaretlediğiniz gibi uygulama/json olacak içerik türüne ihtiyaç duyar. Ancak sadece kabul başlığını ayarlıyorsunuz.

Dene:

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