Свободная проверка - прекратите проверку всех других проверок, если определенная проверка не пройдена
Я использую 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();
});