You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何自定义ASP.NET 7中Fluent Validation的验证响应模型?

自定义ASP.NET 7中Fluent Validation的验证错误响应

要自定义验证错误的响应结构,核心是替换ASP.NET Core默认的InvalidModelStateResponseFactory逻辑,具体步骤如下:

1. 定义自定义错误响应模型

根据业务需求创建符合格式的响应类,按需增删字段:

public class CustomValidationErrorResponse
{
    public int StatusCode { get; set; }
    public string Message { get; set; } = "输入参数验证失败";
    public IDictionary<string, string[]> Errors { get; set; } = new Dictionary<string, string[]>();
}

2. 配置ApiBehaviorOptions替换默认响应逻辑

在Program.cs的服务配置段,添加以下代码覆盖默认的错误响应生成逻辑:

builder.Services.Configure<ApiBehaviorOptions>(options =>
{
    options.InvalidModelStateResponseFactory = context =>
    {
        // 从ModelState中提取Fluent Validation生成的错误信息
        var validationErrors = context.ModelState
            .Where(entry => entry.Value.Errors.Any())
            .ToDictionary(
                entry => entry.Key,
                entry => entry.Value.Errors.Select(error => error.ErrorMessage).ToArray()
            );

        // 实例化自定义响应模型
        var customResponse = new CustomValidationErrorResponse
        {
            StatusCode = StatusCodes.Status400BadRequest,
            Errors = validationErrors
            // 可根据场景修改Message字段内容
        };

        // 返回自定义格式的BadRequest响应
        return new BadRequestObjectResult(customResponse);
    };
});

3. 验证效果

配置完成后,模型验证失败时会返回自定义结构的响应,示例如下:

{
    "StatusCode": 400,
    "Message": "输入参数验证失败",
    "Errors": {
        "UserName": [
            "用户名长度不能少于5个字符,你输入了4个字符。"
        ]
    }
}

额外说明

  • 若要修改错误消息的具体内容,可直接在Fluent Validation验证器中自定义,示例:
    RuleFor(x => x.UserName).MinimumLength(5).WithMessage("用户名长度不能少于5个字符,你输入了{TotalLength}个字符。");
    
  • 原默认响应中的type、traceId等字段,只需在自定义响应模型中不声明即可移除。

内容的提问来源于stack exchange,提问作者Taqi ツ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 21:05:26