我有一个模型:
public class DTO
{
public int[] StatementItems { get; set; }
}
我想验证一下:
StatementItems
不为空StatementItems
不为空StatementItems
不包含任何重复的 ID
我创建的验证规则链是:
RuleFor(x => x.StatementItems).NotNull().NotEmpty().Must(x => x.Distinct().Count() == x.Count());
我有一个测试:
_validator.ShouldHaveValidationErrorFor(x => x.StatementItems, null as int[]);
当我运行传递空值的测试时,我预计它会在链的第一条规则 (NotNull()
) 上失败并停在那里。但是,它提示 Must()
中使用的 lamda 值为空。
如果 NotNull()
失败,我是否认为不应运行 Must()
?如果可以,这个规则应该怎么写?
谢谢
最佳答案
尽管@NPras 的回答确实为我提供了解决方案,但我不喜欢我复制 NotNull 规则这一事实。在对 FluentValidation 进行更多研究后,我使用 DependentRules
实现了它:
RuleFor(x => x.StatementItems).NotNull().NotEmpty()
.DependentRules(d =>
d.RuleFor(x => x.StatementItems).Must(x => x.Distinct().Count() == x.Count())
);
所以现在 Must
条件只有在前两个规则有效时才会触发。
关于c# - FluentValidation 规则链接不会在第一次失败时停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42100254/