我在获取V4 ODataController来反序列化JSON有效负载时遇到麻烦。我在github中创建了一个示例项目来说明我的确切问题:
https://github.com/valainisgt/BadODataDeserialization
当使用application / json的内容类型将数据提交到'/ odata / models'端点时,不会填充模型。使用完全相同的数据键和值,但是这次与application / x-www-form-urlencoded一样,填充模型。
我在这里想念什么?
编辑:
这是我的有效载荷的样子:
{ 'ModelId': 0, 'Name': "John Doe" }
这是针对.NET 462的asp.net核心应用程序。
因此,我正在使用Microsoft.AspNetCore。*软件包。
答案 0 :(得分:0)
操作方法签名中的FromBodyAttribute。
例如,
public async Task<IActionResult> MyMethod([FromBody] MyPayload payload)
{.... 您的代码}
答案 1 :(得分:0)
当使用application / json的内容类型将数据提交到'/ odata / models'端点时,不会填充模型。使用完全相同的数据键和值,但是这次与application / x-www-form-urlencoded一样,填充模型。
如果您想接收application/json
的内容类型,则需要用[FromBody]
修饰模型
public IActionResult Post([FromBody]Model m)
测试用例:
POST http://localhost:50317/odata/models HTTP/1.1
Content-Type: application/json
{
ModelId:11,
Name:"hello"
}
如果要接收x-www-form-urlencoded
的内容类型,则应添加[Bind()]
:
public IActionResult Post([Bind("ModelId,Name")]Model m)
测试用例:
POST http://localhost:50317/odata/models HTTP/1.1
Content-Type: application/x-www-form-urlencoded
ModelId=11&Name=hello
但是,没有内置的modelbinder可以绑定这两种数据类型。如果您确实想这样做,请考虑以下方法:
有关更多信息,请参阅文档here