使用 FluentValidation 可以通过 3 种主要方式执行此操作:条件、依赖规则或自定义规则。
条件
您可以使用 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");
此方法略有不同,因为它创建了模型级规则,因此错误消息将与整个模型相关联,而不是与特定属性相关联。