gpt4 book ai didi

asp.net-mvc - .NET Core 在中间件中捕获 Json 反序列化错误

转载 作者:行者123 更新时间:2023-12-04 17:45:01 49 4
gpt4 key购买 nike

我确定我遗漏了一些显而易见的东西。

是否可以在 .NET Core 的默认中间件/反序列化器中处理 JSON 反序列化错误?我需要确保特定值是 JSON 原语而不是对象/数组。如果它不是原语,我想终止请求并在它到达 Controller 之前返回适当的状态代码。

Controller :

[HttpPost]
public IActionResult Post([FromBody] List<MyType> myTypes)
{
// Logic ....

return Created(new Uri("some-location/", UriKind.Relative), someValue);
}

请求正文:

[
{
"prop1": "some value",
"prop2": "some value",
"prop3": null
},
{
"prop1": "some value",
"prop2": "some value",
"prop3": {
"prop3-1": "some value"
}
}
]

MyType 构造函数检查传入的参数,如果有问题则抛出异常。 MyType 中的 prop3 是一个 dynamic 字段。我已验证在反序列化请求正文中的第二项时会抛出异常。

这一切感觉非常简单,但我就是找不到访问默认反序列化器的位置。

我试过了 this它确实会捕获错误,但只是在请求进入 Controller 之后。

有没有办法在 JSON 注释中处理这个问题?我查看了 Newtonsoft 文档,但没有发现任何内容。

最佳答案

查看此处的文档: https://learn.microsoft.com/en-us/aspnet/core/mvc/models/model-binding?view=aspnetcore-2.1我认为您正在寻找的是 AddJsonOptions()

在 Startup.cs 中:

services.AddMvc().AddJsonOptions(options =>
{
options.SerializerSettings.MissingMemberHandling = Newtonsoft.Json.MissingMemberHandling.Error;
});

这不会抛出异常,但会绑定(bind)失败,因此 myTypes 变为 null。

然后你可以只添加一个空检查

[HttpPost]
public IActionResult Post([FromBody] List<MyType> myTypes)
{
if(myTypes == null)
{
return BadRequest();
}

// Logic ....

return Created(new Uri("some-location/", UriKind.Relative), someValue);
}

关于asp.net-mvc - .NET Core 在中间件中捕获 Json 反序列化错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52469817/

49 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com