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

FluentValidation模型状态无效时未自动拒绝请求 如何获取自定义错误消息

方案1:在Controller接口中直接读取自定义错误消息

你可以直接遍历ModelState的错误集合,提取你在验证器中用WithMessage设置的自定义消息,示例代码如下:

[HttpPost("register")]
public IActionResult Register([FromBody] RegisterUserRequest request)
{
    if (!ModelState.IsValid)
    {
        // 提取所有自定义错误消息
        var errors = ModelState.Values
            .SelectMany(v => v.Errors)
            .Select(e => e.ErrorMessage)
            .ToList();
        
        // 可按照业务需要自定义返回格式
        return BadRequest(new { Code = 400, Errors = errors });
    }
    // 后续正常业务逻辑
}

如果需要同时获取错误对应的请求字段名,可以用以下写法:

var errors = ModelState
    .Where(m => m.Value.Errors.Any())
    .ToDictionary(
        k => k.Key, 
        v => v.Value.Errors.Select(e => e.ErrorMessage).ToList()
    );

方案2:全局统一拦截返回错误消息(无需每个Controller重复写判断逻辑)

如果你希望所有接口的验证错误都统一返回格式,可以自定义Action过滤器实现自动处理:

  1. 先定义过滤器类:
public class ValidateModelStateFilter : IActionFilter
{
    public void OnActionExecuting(ActionExecutingContext context)
    {
        if (!context.ModelState.IsValid)
        {
            var errors = context.ModelState.Values
                .SelectMany(v => v.Errors)
                .Select(e => e.ErrorMessage)
                .ToList();

            context.Result = new BadRequestObjectResult(new
            {
                Code = 400,
                Message = "参数验证失败",
                Errors = errors
            });
        }
    }

    public void OnActionExecuted(ActionExecutedContext context)
    {
    }
}
  1. 在Startup.cs中注册过滤器即可:
services.AddControllers(options =>
{
    options.Filters.Add<ValidateModelStateFilter>();
})
.AddFluentValidation(s =>
{
    s.RegisterValidatorsFromAssemblyContaining<Startup>();
});

配置完成后所有接口触发FluentValidation验证失败时,都会自动返回你设置的自定义错误消息,不需要在每个接口里手动处理ModelState。

注意说明

FluentValidation默认会自动把你通过WithMessage设置的自定义内容填充到ModelState的ErrorMessage字段,只要你验证器的注册逻辑正确,不需要额外配置就能直接读取到自定义错误文本,不会返回系统默认的验证提示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 15:03:03