FluentValidation 自定义验证问题

FluentValidation Custom Validation issue

我在使用 FluentValidation 的 Must 方法时遇到问题。我的视图模型中有这条规则:

RuleFor(v => v.StateCd).Must(stateCd => BeAValidStateCode(stateCd)).WithMessage("Please enter a valid, 2 character state code.")
                                            .NotEmpty().WithMessage("State is required.")
                                            .Length(2).WithMessage("State should be 2 characters.");

验证方法在视图模型中:

private bool BeAValidStateCode(string stateCode)
{
    string states = "|AL|AK|AS|AZ|AR|CA|CO|CT|DE|DC|FM|FL|GA|GU|HI|ID|IL|IN|IA|KS|KY|LA|ME|MH|MD|MA|MI|MN|MS|MO|MT|NE|NV|NH|NJ|NM|NY|NC|ND|MP|OH|OK|OR|PW|PA|PR|RI|SC|SD|TN|TX|UT|VT|VI|VA|WA|WV|WI|WY|";

    return stateCode.Length == 2 && states.IndexOf("|" + stateCode + "|") >= 0;
}

我想确保用户输入的州代码是两个字符并且包含在这个字符串中。我已经测试了验证方法并知道它有效,但它验证输入,例如 "aa"、"jj" 等。我是否错误地使用了 Must 规则?

感谢任何帮助。

更新:自从发布这篇文章以来,我尝试了其他几项操作,包括将 BeAValidStateCode 方法 return 设置为 false,它仍然验证我输入的任何内容。

FluentValidation 不会在不实现自定义客户端提供程序的情况下对 Must() 等规则进行客户端验证。

一般来说,您应该始终进行服务器端验证,客户端是一个受欢迎的选项(因为用户始终可以禁用 Javascript)。

如果您想构建自定义验证提供程序,您或许可以从 this answer or maybe this blog post 中获得一些想法。