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

C# .net core web api post parameter always null

所以这让我抓狂。我正在做一些非常简单的事情,向我的网站 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 并直接读取 body 流

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

我可以看到 body 被正确发送,我有一个超级好的 json 可以转换成我想要的任何东西。所以问题是我错过了什么这个端点不起作用?

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

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

而不是

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

使用

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

不要传递 json 对象,传递字符串化对象:

var location = [
{ 
 "LocationId": "111", 
 "ProductId": 110, 
 "Sku": "11131-LJK" 
  }
]
var dataToPost = JSON.stringify(location);

对于其他人...确保您的 [FromBody] 模型和所有子模型 类 具有无参数构造函数