CascadeMode.StopOnFirstFailure 无效

CascadeMode.StopOnFirstFailure doesn't work

我有以下流利验证:

RuleFor(o => o.zipCode)
    .Cascade(CascadeMode.StopOnFirstFailure)
    .NotEmpty()
    .Must((o, zipCode) => CountryInfoMap.IsValidPostalCode(zipCode, "AT"))
    .When(o => !string.IsNullOrEmpty(o.ZipCode))
    .WithMessage(ErrorDto.ToModelMessage(ErrorCode.InvalidZipCode, $"{{PropertyName}} '{{PropertyValue}}' is invalid for specified country."));

当没有传递 zipCode 值时,它仍然调用静态方法 CountryInfoMap.IsValidPostalCode 方法。为什么它在第一次为空失败时不停止?

移除When:

RuleFor(o => o.zipCode)
    .Cascade(CascadeMode.StopOnFirstFailure)
    .NotEmpty()
    .Must((o, zipCode) => CountryInfoMap.IsValidPostalCode(zipCode, "AT"))
    .WithMessage(ErrorDto.ToModelMessage(ErrorCode.InvalidZipCode, $"{{PropertyName}} '{{PropertyValue}}' is invalid for specified country."));

您已经在验证它了,因为它不是空的。