在 asp.net core 2.1 中,当发生验证错误时,ApiController 将自动响应 400 BadRequest。
如何更改/修改发送回客户端的响应(json-body)?有某种中间件吗?
我正在使用 FluentValidation 来验证发送到控制器的参数,但我对得到的响应不满意。看起来像
{
"Url": [
"'Url' must not be empty.",
"'Url' should not be empty."
]
}
我想更改响应,因为我们有一些附加到响应的默认值。所以它应该看起来像
{
"code": 400,
"request_id": "dfdfddf",
"messages": [
"'Url' must not be empty.",
"'Url' should not be empty."
]
}
The ApiBehaviorOptions https://learn.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.mvc.apibehavioroptions?view=aspnetcore-2.1类允许生成ModelState
通过其定制响应InvalidModelStateResponseFactory https://learn.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.mvc.apibehavioroptions.invalidmodelstateresponsefactory?view=aspnetcore-2.1#Microsoft_AspNetCore_Mvc_ApiBehaviorOptions_InvalidModelStateResponseFactory属性,其类型为Func<ActionContext, IActionResult>
.
这是一个示例实现:
apiBehaviorOptions.InvalidModelStateResponseFactory = actionContext => {
return new BadRequestObjectResult(new {
Code = 400,
Request_Id = "dfdfddf",
Messages = actionContext.ModelState.Values.SelectMany(x => x.Errors)
.Select(x => x.ErrorMessage)
});
};
传入的ActionContext https://learn.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.mvc.actioncontext?view=aspnetcore-2.1实例同时提供ModelState https://learn.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.mvc.actioncontext.modelstate?view=aspnetcore-2.1#Microsoft_AspNetCore_Mvc_ActionContext_ModelState and HttpContext https://learn.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.mvc.actioncontext.httpcontext?view=aspnetcore-2.1#Microsoft_AspNetCore_Mvc_ActionContext_HttpContext活动请求的属性,其中包含我期望您可能需要的所有内容。我不确定你在哪里request_id
值来自,所以我将其作为静态示例。
要使用此实现,请配置ApiBehaviorOptions
实例在ConfigureServices
:
serviceCollection.Configure<ApiBehaviorOptions>(apiBehaviorOptions =>
apiBehaviorOptions.InvalidModelStateResponseFactory = ...
);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)