Jeh*_*hof 2 c# validation asp.net-core
使用asp.net core 2.1,当发生验证错误时,ApiController将自动响应400 BadRequest.
如何更改/修改发送回客户端的响应(json-body)?有某种中间件吗?
我使用FluentValidation来验证发送到我的控制器的参数,但我对我得到的响应不满意.看起来像
{
"Url": [
"'Url' must not be empty.",
"'Url' should not be empty."
]
}
Run Code Online (Sandbox Code Playgroud)
我想更改响应,因为我们有一些默认值附加到响应.所以我应该看起来像
{
"code": 400,
"request_id": "dfdfddf",
"messages": [
"'Url' must not be empty.",
"'Url' should not be empty."
]
}
Run Code Online (Sandbox Code Playgroud)
的ApiBehaviorOptions类提供的产生的能力ModelState的响应经由其来定制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)
});
};
Run Code Online (Sandbox Code Playgroud)
传入ActionContext实例为活动请求提供了两者ModelState和HttpContext属性,其中包含我希望您可能需要的所有内容.我不确定你的request_id价值来自哪里,所以我把它作为你的静态例子.
为了使用此实现,您可以配置ApiBehaviorOptions实例ConfigureServices,如下所示:
serviceCollection.Configure<ApiBehaviorOptions>(apiBehaviorOptions =>
apiBehaviorOptions.InvalidModelStateResponseFactory = ...
);
Run Code Online (Sandbox Code Playgroud)
考虑创建自定义操作 filer,例如:
public class CustomValidationResponseActionFilter : IActionFilter
{
public void OnActionExecuting(ActionExecutingContext context)
{
if (!context.ModelState.IsValid)
{
var errors = new List<string>();
foreach (var modelState in context.ModelState.Values)
{
foreach (var error in modelState.Errors)
{
errors.Add(error.ErrorMessage);
}
}
var responseObj = new
{
code = 400,
request_id = "dfdfddf",
messages = errors
};
context.Result = new JsonResult(responseObj)
{
StatusCode = 400
};
}
}
public void OnActionExecuted(ActionExecutedContext context)
{ }
}
Run Code Online (Sandbox Code Playgroud)
您可以在以下位置注册ConfigureServices:
services.AddMvc(options =>
{
options.Filters.Add(new CustomValidationResponseActionFilter());
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1279 次 |
| 最近记录: |