我们可以用WithMessage重写掉默认的错误消息
RuleFor(customer => customer.Surname).NotNull().WithMessage("Please ensure that you have entered your Surname");
在自定义消息里面我们是可以放入一些 占位符的 例如. 这样下面的这个消息就可以跟上面的是一样的效果了
RuleFor(customer => customer.Surname).NotNull().WithMessage("Please ensure you have entered your {PropertyName}");
所有验证器都能使用的占位符
{PropertyName}
待效验的属性名字{PropertyValue}
待效验的属性值可以用在 比较验证器的占位符 (Equal, NotEqual, GreaterThan, GreaterThanOrEqual, 等.)
{ComparisonValue}
可以在 长度验证器里面使用的占位符
{MinLength}
– 最小长度{MaxLength}
– 最大长度{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(("姓");