Свободная проверка - прекратите проверку всех других проверок, если определенная проверка не пройдена

Я использую 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 ответ

Если вы измените свой 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(); 
});
Другие вопросы по тегам