在.NET Core 2中发布POST对象的数组(列表)的正确方法是什么?

时间:2018-11-09 12:26:53

标签: .net json rest .net-core

我有一个带有此签名的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接受“普通”版本,因为这看起来更标准,更自然。

1 个答案:

答案 0 :(得分:0)

这也适用,而不必包装其他类型,请尝试一下。 我已经与Postman进行了测试

y.max()

screenshot on the breackpoint

您还可以在SO how to post json object array to a web api上查看其他资源,因为我自己已经不记得该怎么做了,我不得不自己做一点工作。

Parameter Binding in ASP.NET Web API所述:“要强制Web API从URI读取复杂类型,请将[FromUri]属性添加到参数。”

Using [FromBody]