FluentValidation 重写消息 overriding

我们可以用WithMessage重写掉默认的错误消息

RuleFor(customer => customer.Surname).NotNull().WithMessage("Please ensure that you have entered your Surname");

占位符 placeholder

在自定义消息里面我们是可以放入一些 占位符的 例如. 这样下面的这个消息就可以跟上面的是一样的效果了

RuleFor(customer => customer.Surname).NotNull().WithMessage("Please ensure you have entered your {PropertyName}");

所有验证器都能使用的占位符

  1. {PropertyName} 待效验的属性名字
  2. {PropertyValue} 待效验的属性值

可以用在 比较验证器的占位符 (Equal, NotEqual, GreaterThan, GreaterThanOrEqual, 等.) {ComparisonValue}

可以在 长度验证器里面使用的占位符

  1. {MinLength} – 最小长度
  2. {MaxLength} – 最大长度
  3. {TotalLength} – 总长度

完整的占位符可以看 内置验证器

自定义验证器 也可以用字符串插值(string interpolation) 和nameof 来获得属性的名称

RuleFor(customer => customer.Surname)
  .NotNull()
  .WithMessage(c => $"This message references some other properties: {nameof(c.Forename)}: {c.Forename} Discount: {c.Discount}");
//Result would be: "This message references some other properties: Forename: Jeremy Discount: 100"

如果我们想重写所有验证器的默认错误消息。 我们可以使用 本地化

重写属性名称

默认验证错误消息包含正在验证的属性名称。例如,如果您要定义这样的验证器:

RuleFor(customer => customer.Surname).NotNull();

哪么默认的错误消息的名称将是 ‘Surname’ 不能为空. 虽然我们可以使用WithMessage来自定义错误消息,但是如果我们只是想改一下属性的名称的话这样做就有点麻烦了。 我们可以使用 WithName

RuleFor(customer => customer.Surname).NotNull().WithName("姓");

现在的错误消息 ‘姓’ 不能为空。 这样对我们中文来说就非常的方便了。 备注:FluentValidation会自己检查当前线程中的文化。中文电脑没有特殊更改的话是 zh-cn 如果不是的话 我们也可以更改

Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("zh-cn");

如果还希望象验证结果里面的 ValidationFailure.PropertyName也更改掉的话。我们可以用

RuleFor(customer => customer.Surname).NotNull().OverridePropertyName(("姓");
最近更新的
...