如何自定义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 ツ
相关产品推荐
相关产品推荐

