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

如何移除FluentValidation错误消息中的‘Severity: Error’后缀?

FluentValidation 11.9.0 升级问题解决指南

移除错误消息的「Severity: Error」后缀

完全可以关闭这个后缀,不用扩展异常类,直接通过自定义异常工厂绕过默认的消息拼接逻辑:

  • 单个验证器配置:在你的AbstractValidator子类里设置ValidationExceptionFactory,直接传入原始错误消息列表,跳过BuildErrorMessage的拼接:
public class YourModelValidator : AbstractValidator<YourModel>
{
    public YourModelValidator()
    {
        // 这里写你的验证规则
        
        // 自定义异常工厂,避免添加Severity后缀
        ValidationExceptionFactory = (context, errors) => 
            new ValidationException(errors.Select(e => e.ErrorMessage));
    }
}
  • 全局配置:如果所有验证都需要移除这个后缀,直接全局设置:
ValidatorOptions.Global.ValidationExceptionFactory = (context, errors) => 
    new ValidationException(errors.Select(e => e.ErrorMessage));

原理:默认的ValidationException构造函数会调用BuildErrorMessage拼接后缀,但直接传入错误消息数组的构造函数不会触发这个逻辑,直接用原始消息创建异常。

修复空PropertyName导致的「-- :」格式&优化属性名显示

解决空PropertyName的怪异格式

自定义验证时,不要依赖默认的PropertyName自动拼接,直接控制消息内容:
比如在自定义验证逻辑里,直接输出完整消息,不包含PropertyName:

RuleFor(x => x)
    .Custom((model, context) => 
    {
        if (/* 你的验证条件不满足 */)
        {
            // 直接添加不带属性名的错误消息
            context.AddFailure("请填写必要信息");
            // 如果需要关联属性但不想显示名称,也可以传空字符串作为属性名
            // context.AddFailure(string.Empty, "请填写必要信息");
        }
    });

优化属性名的用户友好性

有两种方式:

  1. 单个规则设置友好名称:用WithName给特定属性替换成用户能看懂的名称:
RuleFor(x => x.UserName)
    .NotEmpty()
    .WithName("用户名");
  1. 全局配置自动解析友好名称:比如利用DisplayNameAttribute,全局设置解析器:
ValidatorOptions.Global.DisplayNameResolver = (type, member, expr) => 
    member?.GetCustomAttribute<DisplayNameAttribute>()?.DisplayName ?? member?.Name;

之后只要给模型属性加[DisplayName("用户名")],验证消息里就会自动显示这个友好名称,不用每个规则都设置。

关于你尝试重写RaiseValidationException的补充

不用去扩展异常类,替换ValidationExceptionFactory是更简单的方案——RaiseValidationException内部最终会调用这个工厂方法,自定义工厂直接绕过了默认的消息拼接逻辑,完全不需要修改异常类的构造函数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 15:33:30