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."));
您已经在验证它了,因为它不是空的。
我有以下流利验证:
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."));
您已经在验证它了,因为它不是空的。