【问题标题】:Inconsistent behaviour: Error response object in ASP.NET Core when manually return BadRequest不一致的行为:手动返回 BadRequest 时 ASP.NET Core 中的错误响应对象
【发布时间】:2020-11-04 13:12:26
【问题描述】:

我有一个带有静态和动态验证的 ASP.NET Core REST Api。

当我没有指定一个必需的属性时,中间件会自动生成一个很好的错误信息:

{
    "errors": {
        "status": [
            "Required property 'status' not found in JSON. Path '', line 37, position 1."
        ]
    },
    "type": "https://tools.ietf.org/html/rfc7231#section-6.5.1",
    "title": "One or more validation errors occurred.",
    "status": 400,
    "traceId": "|a6b5a076-4b400dadb53f75e7."
}

我也有某种动态验证,我手动填充 ModelState 并返回一个 BadRequest。

简化示例:

ModelState.AddModelError("smh_data.materials.country_of_origin", "Field is required.");
return BadRequest(ModelState);

但在这种情况下,响应如下所示:

{
    "smh_data.materials.country_of_origin": [
        "Field is required."
    ]
}

我怎样才能得到相同的响应对象,包括上面的traceId、类型、标题和状态?

【问题讨论】:

标签: c# asp.net-core .net-core


【解决方案1】:

不要打电话给return BadRequest(),而是打电话给return ValidationProblem()。这将创建一个设置为BadRequestValidationProblemDetails 对象,用您的ModelState 错误填充它,然后返回它。

ValidationProblem() 的重载允许进一步自定义返回的响应。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-06
    • 1970-01-01
    相关资源
    最近更新 更多