我有一个同时具有静态和动态验证的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,类型,标题和状态?
答案 0 :(得分:1)
致电return ValidationProblem()
,而不是致电return BadRequest()
。这将创建一个设置为BadRequest
的{{3}}对象,并用您的ModelState
错误填充它,然后将其返回。
ValidationProblem()
的超载允许进一步自定义返回的响应。