lon*_*nix 6 c# asp.net-core asp.net-core-2.2
尽管自动 400 响应很有用,但我不想向客户端发送验证错误。
这是响应正文:
{
"errors": {
"username": [
"'username' must not be empty."
],
...more errors
},
"title": "One or more validation errors occurred",
"status": 400,
"traceId": "xxx:yyy"
}
Run Code Online (Sandbox Code Playgroud)
但我想要的是默认的,没有错误:
{
"type": "https://tools.ietf.org/html/rfc7231#section-6.5.1",
"title": "Bad Request",
"status": 400,
"traceId": "xxx:yyy"
}
Run Code Online (Sandbox Code Playgroud)
我以为我需要做的一切都已确定
options.SuppressUseValidationProblemDetailsForInvalidModelStateResponses = true;
Run Code Online (Sandbox Code Playgroud)
...但这没有任何作用。
我不想禁用此功能,我只是想抑制验证错误。我怎么做?
顺便说一句,我正在使用一种解决方法,通过手动创建响应正文,但我宁愿避免这种情况:
services.Configure<ApiBehaviorOptions>(apiBehaviorOptions => {
apiBehaviorOptions.InvalidModelStateResponseFactory = actionContext => {
var pd = new ProblemDetails();
pd.Type = apiBehaviorOptions.ClientErrorMapping[400].Link;
pd.Title = apiBehaviorOptions.ClientErrorMapping[400].Title;
pd.Status = 400;
pd.Extensions.Add("traceId", actionContext.HttpContext.TraceIdentifier);
return new BadRequestObjectResult(pd);
};
});
Run Code Online (Sandbox Code Playgroud)
“问题详细信息”对应于 RFC 7807,这是标准化 HTTP API 报告错误方式的尝试。SuppressUseValidationProblemDetailsForInvalidModelStateResponses不具体涵盖实际验证错误的返回,仅涵盖 RFC 中讨论的标准位。
做你想做的事情的唯一方法就是你已经做过的事情,即使用自定义工厂。这不是黑客攻击或解决方法:这是改变自动响应的记录方法。
也就是说,抑制验证错误绝对是零意义的。整个要点是告知客户请求中存在哪些错误,以便客户可以纠正这些错误。如果没有这个,你只是关上门,没有任何迹象表明出了什么问题或如何解决它。
| 归档时间: |
|
| 查看次数: |
7797 次 |
| 最近记录: |