Fluent Validation WithMessage 无法与 SetValidator 一起正常工作
Fluent Validation WithMessage not working correctly with a SetValidator
我已经成功使用了以下形式的WithMessage:
RuleFor(p => p.MyField)
.NotEmpty()
.WithMessage("{0} is Required",
p => p.SomeOtherField
);
这允许在错误消息中使用 SomeOtherField 的值。
我有一个更复杂的要求,我将 SetValidator 与我自己的自定义 PropertyValidator 一起使用,如下所示:
我认为可行的是:
RuleFor(x => x.MyField)
.SetValidator(
new RemoteValidator(
"Validate",
"Home",
System.Web.Mvc.HttpVerbs.Post,
"*.SomeOtherProperty1,*.SomeOtherProperty2")
)
.WithMessage("{0} is not valid",
p => p.MyOtherField
)
;
...但事实并非如此。当验证失败时,我收到消息:
{0} is not valid
例如。 {0} 未被替换
有什么想法吗?
从 here 我发现了 PropertyNameResolver 的概念,听起来可能很合适,但我不知道如何配置它。 link 上的示例给出:
ValidatorOptions.PropertyNameResolver = (type, member) => {
if(member != null) {
return member.Name + "Foo";
}
return null;
};
我正在使用 Fluent Validations v5.6.2。
这实际上是我的自定义验证器的问题。
我正在关注 this pattern 这使得它更加自定义并且正在包装 MVC 的远程属性。
用更多 "normal" 自定义验证器替换它,这个位工作正常:
.WithMessage("{0} is not valid",
p => p.MyOtherField
)
;
我已经成功使用了以下形式的WithMessage:
RuleFor(p => p.MyField)
.NotEmpty()
.WithMessage("{0} is Required",
p => p.SomeOtherField
);
这允许在错误消息中使用 SomeOtherField 的值。
我有一个更复杂的要求,我将 SetValidator 与我自己的自定义 PropertyValidator 一起使用,如下所示:
我认为可行的是:
RuleFor(x => x.MyField)
.SetValidator(
new RemoteValidator(
"Validate",
"Home",
System.Web.Mvc.HttpVerbs.Post,
"*.SomeOtherProperty1,*.SomeOtherProperty2")
)
.WithMessage("{0} is not valid",
p => p.MyOtherField
)
;
...但事实并非如此。当验证失败时,我收到消息:
{0} is not valid
例如。 {0} 未被替换
有什么想法吗?
从 here 我发现了 PropertyNameResolver 的概念,听起来可能很合适,但我不知道如何配置它。 link 上的示例给出:
ValidatorOptions.PropertyNameResolver = (type, member) => {
if(member != null) {
return member.Name + "Foo";
}
return null;
};
我正在使用 Fluent Validations v5.6.2。
这实际上是我的自定义验证器的问题。
我正在关注 this pattern 这使得它更加自定义并且正在包装 MVC 的远程属性。
用更多 "normal" 自定义验证器替换它,这个位工作正常:
.WithMessage("{0} is not valid",
p => p.MyOtherField
)
;