【发布时间】:2018-05-24 08:50:15
【问题描述】:
在我的 DTO 对象上,我有几个属性来检查它的有效性
当验证失败时,我会收到这样的正文响应
{
"TransactionId": [
"Max length is 20"
],
"AdditionalInfo": [
"Additional Info has to be no longer than 30 chars"
]
}
但我需要将所有错误统一为“错误”键。 类似的东西
{
"Error": [
"Max length is 20",
"Additional Info has to be no longer than 30 chars"
]
}
我编写了特殊的过滤器并在 Startup.cs 中注册了它
public class ModelStateErrorHandlingFilter : IAsyncActionFilter
{
public async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
{
if (!context.ModelState.IsValid)
{
context.ModelState.SetModelValue("Errors", new ValueProviderResult(new StringValues(context.ModelState.ToString())));
context.Result = new BadRequestObjectResult(context.ModelState);
}
else
{
await next().ConfigureAwait(false);
}
}
}
但没有任何改变。我也尝试过更改密钥,但它有 privat setter
【问题讨论】:
-
您需要提供自己的自定义
IActionResult或构建所需的对象模型并将其传递给ObjectResult
标签: c# asp.net-core filter asp.net-core-mvc