如果请求失败,我将尝试在WebApi中实现详细描述的错误。当尝试将json主体绑定到DTO类时,对于模型绑定失败的第一个属性,我得到了非常好的可读性错误,但随后似乎停止了。我想返回模型绑定失败的所有字段的信息。
我的DTO类如下:
public class RequestDTO
{
public int FirstValue { get; set; }
public int SecondValue { get; set; }
}
传递以下JSON时
{
"firstValue": "y",
"secondValue": "x"
}
我收到以下答复
{
"type": "https://tools.ietf.org/html/rfc7231#section-6.5.1",
"title": "One or more validation errors occurred.",
"status": 400,
"traceId": "|6ba7ef4a-442494fd16304f12.",
"errors": {
"$.firstValue": [
"The JSON value could not be converted to System.Int32. Path: $.firstValue | LineNumber: 1 | BytePositionInLine: 18."
]
}
}
我想要达到的目标是得到像这样的回复
{
"type": "https://tools.ietf.org/html/rfc7231#section-6.5.1",
"title": "One or more validation errors occurred.",
"status": 400,
"traceId": "|6ba7ef4a-442494fd16304f12.",
"errors": {
"$.firstValue": [
"The JSON value could not be converted to System.Int32. Path: $.firstValue | LineNumber: 1 | BytePositionInLine: 18."
],
"$.secondValue": [
"The JSON value could not be converted to System.Int32. Path: $.secondValue | LineNumber: 1 | BytePositionInLine: 19."
]
}
}
但是我不知道该怎么做。我希望我的问题足够清楚,否则请发表评论,我会进行更新。
答案 0 :(得分:1)
从3.0版开始,ASP.NET Core使用System.Text.Json
处理JSON。它会在出现第一个错误时停止反序列化,并且似乎没有禁用它的设置。
如果您需要更多反序列化错误,则可以使用旧的Newtosoft.Json
。只需添加Microsoft.AspNetCore.Mvc.NewtonsoftJson
nuget包,然后在ConfigureServices
services.AddControllers();
到
services.AddControllers().AddNewtonsoftJson();
但是,System.Text.Json
的性能更好,建议使用它。