防止特定控制器中的自动 400 响应

问题描述 投票:0回答:1

如何禁用 ASP.NET Core 中特定控制器的自动 HTTP 400 响应?

我有一个记录用户活动的日志服务,但我无法记录错误的请求响应,因为它们在到达控制器之前会自动返回。如何修改此行为以允许在发送响应之前进行记录?

我尝试重写

IsValid
方法来自定义验证过程。我的期望是我可以在控制器中调用此方法来验证模型。但是,当我在控制器中调用
IsValid
时,模型似乎没有按预期进行验证。有人可以帮助澄清为什么会发生这种情况或建议替代方法吗?

c# asp.net model-validation
1个回答
0
投票

您可以使用

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
                }));
            };
        });
© www.soinside.com 2019 - 2024. All rights reserved.