如何让模型绑定在第一次失败后不停止

托马斯·松德瓦尔

如果请求失败,我正在尝试在我的 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."
        ]
    }
}

但我就是不知道该怎么做。我希望我的问题足够清楚,否则请发表评论,我会更新。

彼得·L。

从 3.0 版 ASP.NET Core 开始System.Text.Json用于处理 JSON。它在第一个错误时停止反序列化,并且似乎没有禁用它的设置。

如果您需要更多反序列化错误,您可以使用旧的Newtosoft.Json. 只需添加Microsoft.AspNetCore.Mvc.NewtonsoftJsonnuget 包并添加更改以下行ConfigureServices

services.AddControllers();

services.AddControllers().AddNewtonsoftJson();

但是,System.Text.Json已经获得了更好的性能,建议使用它。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Pytest 在第一次失败后停止运行

第一次失败后如何使junit测试停止

在第一次期望失败后停止茉莉花测试

为什么在第一次迭代后就停止了?

第一次后停止读取NFC标签

While 循环在第一次迭代后停止

inotify脚本在第一次更改后停止

For循环在第一次迭代后停止

Ajax 代码在第一次计算后停止

循环在第一次迭代后停止吗?

套接字在第一次接收后停止

防止功能在“ for”循环内的第一次“返回”时不停止

Python鼻子框架:如何在第一次失败时停止执行

第一次测试失败时如何停止GTest测试用例的执行

第一次演练后如何停止触发Introjs?

第一次匹配后如何停止文件行中的匹配

第一次替换后如何停止替换字母?

第一次单击后如何停止jQuery代码块执行

在第一次编辑后编辑列时如何停止时间戳更新

第一次失败后,如何使此Sudoku算法变得不粘滞?

x秒/第一次尝试失败的响应后,socket.io停止重新发射事件

第一次点击后如何禁用按钮?

第一次匹配失败后,Dota2 如何知道匹配高优先级的玩家?

通过“ go test”在第一次测试失败时停止

运行测试容器 *.dll 文件时在第一次失败时停止 MStest

FluentValidation规则链接在第一次失败时不会停止

第一次推送到数组后,Angular 不会绑定转发器

在 PHP 中第一次替换后停止替换字符串中的文本

Cygwin-尾部在第一次写入后停止读取输入管道