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
扩展名,检查 A
和 B
是否不为空(或 if
围绕这条规则)。
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
扩展名,检查 A
和 B
是否不为空(或 if
围绕这条规则)。