Fluent validation supports conditional validation, just use the When clause to check the value of the secondary field:
https://fluentvalidation.net/start#conditions
Specifying a condition with When/Unless The When and Unless methods can be used to specify conditions that control when the rule
should execute. For example, this rule on the CustomerDiscount
property will only execute when IsPreferredCustomer is true:
RuleFor(customer => customer.CustomerDiscount)
.GreaterThan(0)
.When(customer => customer.IsPreferredCustomer);
The Unless method is simply the opposite of When.
You may also be able to use the .SetValidator operation to define a custom validator that operates on the NotEmpty condition.
RuleFor(customer => customer.CustomerDiscount)
.GreaterThan(0)
.SetValidator(New MyCustomerDiscountValidator);
If you need to specify the same condition for multiple rules then you
can call the top-level When method instead of chaining the When call
at the end of the rule:
When(customer => customer.IsPreferred, () => {
RuleFor(customer => customer.CustomerDiscount).GreaterThan(0);
RuleFor(customer => customer.CreditCardNumber).NotNull();
});
This time, the condition will be applied to both rules. You can also
chain a call to Otherwise which will invoke rules that don’t match the
condition:
When(customer => customer.IsPreferred, () => {
RuleFor(customer => customer.CustomerDiscount).GreaterThan(0);
RuleFor(customer => customer.CreditCardNumber).NotNull();
}).Otherwise(() => {
RuleFor(customer => customer.CustomerDiscount).Equal(0);
});
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…