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
                        )
        ;