2015-06-19 3 views
2

Я использую проверку Fluent для проверки на стороне сервера. Я создал набор правил, которые будут проверены. Все эти правила являются отдельными функциями в моем валидаторе.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, потому что он всегда проверяет первый сбой проверки и прекращает проверку других. Есть ли способ, которым я мог бы вернуться к службе (откуда вызывается валидатор), когда авторизация авторизации не удалась.

ответ

6

Если вы изменили метод 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(); 
}); 
+0

Благодаря Yannick ... – Subash

+2

Просто напоминание, если мой ответ решил вашу проблему, тогда, пожалуйста, примите это. –

 Смежные вопросы

  • Нет связанных вопросов^_^