如何禁用 ASP.NET Core 中特定控制器的自动 HTTP 400 响应?
我有一个记录用户活动的日志服务,但我无法记录错误的请求响应,因为它们在到达控制器之前会自动返回。如何修改此行为以允许在发送响应之前进行记录?
我尝试重写
IsValid
方法来自定义验证过程。我的期望是我可以在控制器中调用此方法来验证模型。但是,当我在控制器中调用 IsValid
时,模型似乎没有按预期进行验证。有人可以帮助澄清为什么会发生这种情况或建议替代方法吗?
您可以使用
ConfigureApiBehaviorOptions
记录模型验证的错误。例如
builder.Services.AddControllers().ConfigureApiBehaviorOptions(options => {
options.InvalidModelStateResponseFactory = context => {
var errors = context.ModelState
.Where(x => x.Value is { Errors.Count: > 0 })
.SelectMany(x => x.Value!.Errors.Select(e => $"{x.Key} | {e.ErrorMessage}"))
.ToList();
//Todo: log errors here
return new BadRequestObjectResult(ApiResponse<ExceptionDetails>.FailureResponse(new ExceptionDetails
{
Title = "One or more validation errors",
Errors = errors
}));
};
});