UseExceptionHandler无法处理验证错误



在Asp.Net Core 5中,我使用UseExceptionHandler全局处理异常,除非我发送无效对象,否则它可以正常工作。例如,我发送一个具有所需属性"的空值的对象;名称";我在客户端中收到以下错误,但调试器中未命中Run函数。

{"类型":";https://tools.ietf.org/html/rfc7231#section-6.5.1"标题":"一或多个验证错误发生&"状态":400;traceId":"00-2428f0fb9c415843bca2aaef08eda6f6-11ea476efb792849-00"错误":{"名称":字段名称是必需的"]}}

(作为管道中的第一个中间件:(

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;
};
});

最新更新