行为不一致:手动返回BadRequest

时间:2020-11-04 13:12:26

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

我有一个同时具有静态和动态验证的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,类型,标题和状态?

1 个答案:

答案 0 :(得分:1)

致电return ValidationProblem(),而不是致电return BadRequest()。这将创建一个设置为BadRequest的{​​{3}}对象,并用您的ModelState错误填充它,然后将其返回。

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