Skip to main content
 首页 » 编程设计

C# .net 核心 web api post 参数始终为 null

2024年02月05日30JustinYoung

所以这让我抓狂。我正在做一些非常简单的事情,向我的 web api 发送 POST 请求。端点设置如下:

[HttpPost] 
[Route("locations")] 
public async Task<IActionResult> PostLocations([FromBody]IEnumerable<Location>locations) 

我正在按如下方式调用电话:

http://localhost:60254/api/Fetch/locations 
With the body  
{ 
  "Locations": [ 
    {  
        "LocationId": "111",  
        "ProductId": 110,  
        "Sku": "11131-LJK"  
    } 
  ] 
} 
 
And header: content-type: application/json 

现在又一次,这是非常简单的东西,应该开箱即用,这个该死的框架变化把一切都搞砸了。

现在,如果我获取 HttpContext 并直接读取正文流

    using (StreamReader reader = new StreamReader(HttpContext.Request.Body, Encoding.UTF8)) 
    { 
      string  body = reader.ReadToEnd(); 
    } 

我可以看到正文被正确发送,我有一个格式非常好的 json,我可以将其转换成任何我想要的。所以问题是我错过了什么这个端点不起作用?

web api 项目模板没有立即添加哪些配置才能使其正常工作?

请您参考如下方法:

您的有效负载不是 Location 的列表,而是具有 Locations 属性的对象,该属性是一个列表。

代替

{ 
  "Locations": [ 
   {  
      "LocationId": "111",  
      "ProductId": 110,  
      "Sku": "11131-LJK"  
   } 
 ] 
} 

使用

 [ 
   {  
     "LocationId": "111",  
     "ProductId": 110,  
     "Sku": "11131-LJK"  
   } 
 ]