我正在尝试验证具有三个必需属性的类。
如果其中一个或多个为null,则应触发一条验证消息。
是否有一种惯用的方法来描述流利的验证器?
我正在查看dependant rules,但是文档页面的底部建议不要使用它们。
此外,我仍然要验证所有三个属性。我只是不想重复消息。
我注意到RuleSets,但这些似乎有不同的用途。
或者,我可以为这三个选项专门创建一个验证器,但是没有消息,然后将新的验证器链接到原始验证器中。那我想给我一个信息。
但这对于围绕可读性构建的系统来说是很多仪式。
因此,寻找一种可读的方式来表达对三个字段的验证,并以一条消息作为结果。
答案 0 :(得分:1)
使用FluentValidation可以通过以下三种主要方法:条件,相关规则或自定义规则。
您可以将3个单独的规则声明与When
条件一起使用,以确保仅收到一条验证消息。
RuleFor(x => x.Property1).NotNull()
.WithMessage("At least one is required");
RuleFor(x => x.Property2).NotNull()
.When(x => x.Property2 != null)
.WithMessage("At least one is required");
RuleFor(x => x.Property3).NotNull()
.When(x => x.Property1 != null && x.Property2 != null)
.WithMessage("At least one is required");
RuleFor(x => x.Property1).NotNull()
.WithMessage("At least one is required")
.DependentRules(() => {
RuleFor(x => x.Property2).NotNull()
.WithMessage("At least one is required")
.DependentRules(() => {
RuleFor(x => x.Property3).NotNull().WithMessage("At least one is required");
});
});
我不是特别喜欢这种方法-我认为很难阅读(因此在文档中显示警告),但是如果您喜欢这种方法,它将很好用。
RuleFor(x => x)
.Must(x => x.Property1 != null && x.Property2 != null && x.Property3 != null)
.WithMessage("At least one is required");
此方法在创建模型级规则时会稍有不同,因此错误消息将与整个模型关联,而不是与特定属性关联。