使用HttpClient和Web API方法参数发布到Web API最终为空

我正在尝试使用HttpClient POST到Web API。 当我在Web API的Save方法中放置断点时,[FromBody] Product为null。 这意味着我将产品发布到Web API的方式出了问题。 有人可以看看下面的代码,看看我可能会出错。 我假设它与标题和内容类型有关。

POST从客户端存储库调用Web API,它应该通过JSON传递产品对象:

public async Task 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(data); } } return product; } 

Web 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]产品参数最终为空。

您是否尝试过像提琴手那样检查请求? 正如您所指出的,它需要内容类型为application / json。 但是你只是设置了接受标题。

尝试:

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