所以这让我疯了。我正在做一些非常简单的向我的网络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项目模板没有开箱即可添加哪些配置?
答案 0 :(得分:4)
您的有效负载不是Location
的列表,而是具有Locations
属性列表的对象。
而不是
{
"Locations": [
{
"LocationId": "111",
"ProductId": 110,
"Sku": "11131-LJK"
}
]
}
使用
[
{
"LocationId": "111",
"ProductId": 110,
"Sku": "11131-LJK"
}
]
答案 1 :(得分:0)
不传递json对象,传递字符串化的对象:
var location = [
{
"LocationId": "111",
"ProductId": 110,
"Sku": "11131-LJK"
}
]
var dataToPost = JSON.stringify(location);
答案 2 :(得分:0)
对于其他人......确保您的[FromBody]
模型和所有子类都具有无参数构造函数