如何使用fluent验证将值传递到错误消息中

本文关键字:错误 消息 值传 何使用 fluent 验证 | 更新日期: 2023-09-27 18:00:30

是否可以将值传递到错误消息中。我试过这样的东西:

RuleFor(x => x.ForeName).Length(1, 255).WithLocalizedMessage(() => String.Format(ValidationErrors.TooLong, "255"));

ValidationErrors是我的资源文件,其中包含:

TooLong请使用少于{0}个字符。

此:

RuleFor(x => x.ForeName).Length(1, 255).WithLocalizedMessage(() => ValidationErrors.TooLong);

工作良好。

如何使用fluent验证将值传递到错误消息中

对于当前发布的FluentValidation(v2)版本,使用本地化消息时不支持此功能。

WithLocalizedMessage的第一个参数必须始终标识资源属性-不能在其中放置任意代码(例如对string.format的调用)

如果你使用的是非本地化消息,那么你可以这样做:

RuleFor(x => x.Property).Length(1,255).WithMessage("Max number of chars is {0}", "255");

从FluentValidation v3开始,您还可以将这种方法用于本地化的错误消息,但目前还没有二进制版本,因此如果您想利用这种方法,则可以从项目站点获取并构建源代码。

作为一种选择,您可以使用FV内置的对默认验证器命名占位符的支持,而不是使用数字占位符。因此,如果您使用.Length(1255),那么您可以在错误消息中使用{MaxLength},而不是{0}:

请使用少于{MaxLength}个字符。

FV会自动将其替换为您输入的最大值。文档中有所有命名占位符的完整列表。