Fluent 验证支持条件验证,只需使用 When 子句检查辅助字段的值即可:
https://fluentvalidation.net/start#conditions
使用When/Unless 指定条件 When 和Unless 方法可用于指定控制规则何时执行的条件
应该执行。例如,关于 CustomerDiscount 的这条规则
属性只会在 IsPreferredCustomer 为 true 时执行:
RuleFor(customer => customer.CustomerDiscount)
.GreaterThan(0)
.When(customer => customer.IsPreferredCustomer);
除非方法与何时相反。
您还可以使用 .SetValidator 操作来定义在 NotEmpty 条件下运行的自定义验证器。
RuleFor(customer => customer.CustomerDiscount)
.GreaterThan(0)
.SetValidator(New MyCustomerDiscountValidator);
如果您需要为多个规则指定相同的条件,那么您
可以调用顶级When方法而不是链接When调用
在规则的末尾:
When(customer => customer.IsPreferred, () => {
RuleFor(customer => customer.CustomerDiscount).GreaterThan(0);
RuleFor(customer => customer.CreditCardNumber).NotNull();
});
这一次,条件将应用于两个规则。你也可以
将调用链接到否则将调用不匹配的规则
条件:
When(customer => customer.IsPreferred, () => {
RuleFor(customer => customer.CustomerDiscount).GreaterThan(0);
RuleFor(customer => customer.CreditCardNumber).NotNull();
}).Otherwise(() => {
RuleFor(customer => customer.CustomerDiscount).Equal(0);
});