流畅验证 - 当特定验证失败时,停止验证所有其他验证

本文关键字:验证 其他 失败 | 更新日期: 2023-09-27 17:56:57

我正在使用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,因为它总是检查第一次验证失败并停止验证其他失败。有没有办法在授权验证失败时返回服务(从调用验证器的位置)。

流畅验证 - 当特定验证失败时,停止验证所有其他验证

如果将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(); 
});