我有一个带有此签名的API方法:
public async Task<IActionResult> PostCompanies([FromBody] List<Company> companies)
...并且自动生成的swagger文档显示JSON应该是一个普通数组:
[
{
"fuelSiteId":228972,
"name": "foo"
},
{
"fuelSiteId":300000010,
"name": "bar"
}
]
但是,如果我将其发布回去,它将无法正常工作,并且出现错误:
“无法将当前JSON数组(例如[1,2,3])反序列化为类型'Company',因为该类型需要JSON对象”
解决方法是将数组添加到虚拟属性:
{
data: [
{
"fuelSiteId":228972,
"name": "foo"
},
{
"fuelSiteId":300000010,
"name": "bar"
}
]
}
但是我在该站点上发现的所有内容都暗示这不是必须的,也不是您通常在REST中执行的方式。此外,这意味着自动生成的文档所说的实际上不是应该发布的内容!
哪个错?我的API代码或自动生成的Swagger文档或其他内容?
理想情况下,我希望我的API接受“普通”版本,因为这看起来更标准,更自然。
答案 0 :(得分:0)
这也适用,而不必包装其他类型,请尝试一下。 我已经与Postman进行了测试
y.max()
您还可以在SO how to post json object array to a web api上查看其他资源,因为我自己已经不记得该怎么做了,我不得不自己做一点工作。
如Parameter Binding in ASP.NET Web API所述:“要强制Web API从URI读取复杂类型,请将[FromUri]属性添加到参数。”