Fluent验证 - 在特定验证失败时停止验证所有其他验证

时间:2015-06-19 00:56:10

标签: c# asp.net-mvc validation fluentvalidation

我正在使用Fluent Validation进行服务器端验证。我已经创建了一组将被验证的规则。所有这些规则都是我的验证器中的单个函数。

 public SampleValidator()
{
            Validate_Authorisation();
            ValidateTitle_NotEmpty();
            ValidateGender_NotEmpty();
            ValidateFirstName_Regex();
            ValidateFirstName_NotEmpty();
            ValidateSurname_NotEmpty();
            ValidateSurname_Regex();
            ValidateMobilePhone_Regex();
}

private void Validate_Authorisation()
        {
            RuleFor(Model=> Model)
                .Must(Model=> IsUserAuthorised(UserName))
                .WithName("Authorisation Check");
        }

 private void ValidateTitle_NotEmpty()
        {
            RuleFor(model=> model)
            .Must(title=> !string.IsNullOrEmpty(title))
            .WithName("Title");
             }
        private void ValidateGender_NotEmpty()
        {
            RuleFor(model=> model)
              .Must(Gender=> !string.IsNullOrEmpty(Gender))
               .WithName("Gender");
        }.... And others

现在,我希望在授权验证失败时停止验证所有其他验证。我不想使用CascadeMode.StopOnFirstFailure,因为它总是检查第一次验证失败并停止验证其他验证失败。当授权验证失败时,有没有办法可以返回服务(从调用验证器的位置)。

1 个答案:

答案 0 :(得分:7)

如果您将Validate_Authorisation方法更改为以下内容:

private IRuleBuilderOptions<Model, string> Validate_Authorisation()
{
    RuleFor(Model=> Model)
        .Must(Model=> IsUserAuthorised(UserName))
        .WithName("Authorisation Check");
}

然后,您可以使用dependentRules扩展程序执行以下操作:

Validate_Authorisation().DependentRules(rules =>
{
    ValidateTitle_NotEmpty();
    ValidateGender_NotEmpty();
    ValidateFirstName_Regex();
    ValidateFirstName_NotEmpty();
    ValidateSurname_NotEmpty();
    ValidateSurname_Regex();
    ValidateMobilePhone_Regex(); 
});