CascadeMode StopOnFirstFailure 不起作用

CascadeMode StopOnFirstFailure doesn't work

public class Validator : AbstractValidator<Query>
        {
            public Validator()
            {
                CascadeMode = CascadeMode.StopOnFirstFailure;

                RuleFor(x => x.A).NotEmpty();
                RuleFor(x => x.B).NotEmpty();
                RuleFor(x => x).MustAsync(...);
            }
        }

我喜欢构造在不满足上述规则时不调用 MustAsync 的验证器。不幸的是,在验证器中将 CascadeMode 设置为 StopOnFirstFailure 不起作用。

如作者所述

That's the correct behaviour - CascadeMode only affects validators within the same rule chain. Independent calls to RuleFor are separate, and not dependent on the success or failure of other rules.

参见 this

所以它适用于这种情况

Rulefor(x => x.A)
.NotEmpty()
.Length(10);

=> 只有当 A 不为空时才会应用 Length 验证。

因此您必须在 MustAsync 规则中使用 When 扩展名,检查 AB 是否不为空(或 if围绕这条规则)。