c# - UseExceptionHandler 无法处理验证错误
问题描述
在 Asp.Net Core 5 中,我使用 UseExceptionHandler 全局处理异常,除非我发送无效对象,否则它工作正常。例如,我为所需的属性“名称”发送了一个值为空的对象,我在客户端收到以下错误,但运行函数没有在调试器中命中。
{"type":"https://tools.ietf.org/html/rfc7231#section-6.5.1" ,"title":"出现一个或多个验证错误。","status":400,"traceId" :"00-2428f0fb9c415843bca2aaef08eda6f6-11ea476efb792849-00","errors":{"Name":["必填字段名称"]}}
(作为管道中的第一个中间件 :)
app.UseExceptionHandler(a => a.Run(async context =>
{
//this does not being exceuted for validation errors
var exceptionHandlerPathFeature = context.Features.Get<IExceptionHandlerPathFeature>();
var exception = exceptionHandlerPathFeature.Error;
var exceptionManager = a.ApplicationServices.GetRequiredService<IExceptionManager>();
await context.Response.WriteAsJsonAsync(exceptionManager.Manage(exception, context));
}));
解决方案
这可能会对您有所帮助。
services.AddControllers().ConfigureApiBehaviorOptions(options =>
{
options.InvalidModelStateResponseFactory = context =>
{
var errors = context.ModelState.Keys
.SelectMany(key => context.ModelState[key].Errors.Select(x => $"{key}: {x.ErrorMessage}"))
.ToArray();
var apiError = new CustomErrorClass()
{
Message = "Validation Error",
Errors = errors
};
var result = new ObjectResult(apiError);
result.ContentTypes.Add(MediaTypeNames.Application.Json);
return result;
};
});
推荐阅读
- amazon-web-services - AWS EC2 实例开放端口
- java - Osgi 包及其与包的关系
- javascript - 谷歌云功能删除“丢失文档”的子集合
- r - 为什么我从图中得到错误的邻居
- r - 有没有办法从 R 中不均匀间隔的数据帧中制作时间序列?
- php - 在 Woocommerce 管理页面中设置默认的自定义帐单状态字段值
- javascript - 如何通过JS手动向用户报告输入标签?
- sql - 均匀分布的 SQL NTILE
- reactjs - React app + heroku 服务器不能在生产环境中工作,但在开发环境中工作正常
- python - 用户身份验证在 django 中不起作用