当FluentValidation返回错误时,如何返回自定义响应?

问题描述

我正在使用FluentValidation来验证我的ASP.NET Core 3.1 Web API的输入。我正在以“自动”方式进行操作。因此,在我的Startup课堂上,我有这个:

        services.AddControllers()
            .AddFluentValidation(opt =>
            {
                opt.RegisterValidatorsFromAssemblyContaining(typeof(UserInputValidator));
            });

这样,FluentValidation神奇地验证了上述程序集的所有输入,而无需其他代码。很不错,但是...响应格式与返回BadRequest时使用的响应格式不同。这是FluentValidation格式:

{
    "type": "https://tools.ietf.org/html/rfc7231#section-6.5.1","title": "One or more validation errors occurred.","status": 400,"traceId": "|3b037c98-40d28ab8553d6989.","errors": {
        "UserId": [
            "'User Id' must be greater than '0'."
        ],"score": [
            "'score' must be between 0 and 500. You entered 900."
        ]
    }
}

我宁愿拥有:

{
    "code": 123456,"message": "One or more validation errors occurred.","errors": [
        "'User Id' must be greater than '0'.","'score' must be between 0 and 500. You entered 900."
    ]
}

所以我的问题是,是否可以覆盖它?

我有一个主意,但是不确定这是否是一个好习惯(甚至可能),但是如果FluentValidation而不是返回其BadRequest response会引发异常,我将能够捕获到它在中间件中并重新格式化。

无论如何,FluentValidation非常受欢迎,.NET Core WebAPI非常受欢迎。我很难相信“忍者开发者”只会使用第三方工具提供的响应,而响应格式与他们的响应格式不匹配。但是,我看不到如何解决它的许多材料(即使在FluentValidation网站上也是如此。我错过了吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)