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

cs0*_*815 4 c# fluentvalidation

是否可以将值传递给错误消息.我尝试过这样的事情:

RuleFor(x => x.ForeName).Length(1, 255).WithLocalizedMessage(() => String.Format(ValidationErrors.TooLong, "255"));
Run Code Online (Sandbox Code Playgroud)

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

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

这个:

RuleFor(x => x.ForeName).Length(1, 255).WithLocalizedMessage(() => ValidationErrors.TooLong);
Run Code Online (Sandbox Code Playgroud)

工作良好.

Jer*_*ner 6

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

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

如果您使用的是非本地化消息,则可以执行以下操作:

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

从FluentValidation v3开始,你也可以使用这种方法和本地化的错误消息,但是还没有二进制版本,所以如果你想利用这个,那么你可以从项目站点获取和构建源代码.

作为替代方法,您可以使用FV内置支持默认验证器的命名占位符,而不是使用数字占位符.因此,如果您正在使用.Length(1,255),那么您可以在错误消息中使用{MaxLength}而不是{0}:

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

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