La convalida fluida supporta la convalida condizionale, basta usare la clausola When per controllare il valore del campo secondario:
https://fluentvalidation.net/start#conditions
Specificare una condizione con When / Unless I metodi When e Unless possono essere utilizzati per specificare le condizioni che controllano quando la regola deve essere eseguita. Ad esempio, questa regola sulla proprietà CustomerDiscount verrà eseguita solo quando IsPreferredCustomer è true:
RuleFor(customer => customer.CustomerDiscount)
.GreaterThan(0)
.When(customer => customer.IsPreferredCustomer);
Il metodo Unless è semplicemente l'opposto di When.
Potresti anche essere in grado di utilizzare l'operazione .SetValidator per definire un validatore personalizzato che opera sulla condizione NotEmpty.
RuleFor(customer => customer.CustomerDiscount)
.GreaterThan(0)
.SetValidator(New MyCustomerDiscountValidator);
Se è necessario specificare la stessa condizione per più regole, è possibile chiamare il metodo When di primo livello invece di concatenare la chiamata When alla fine della regola:
When(customer => customer.IsPreferred, () => {
RuleFor(customer => customer.CustomerDiscount).GreaterThan(0);
RuleFor(customer => customer.CreditCardNumber).NotNull();
});
Questa volta, la condizione verrà applicata a entrambe le regole. Puoi anche concatenare una chiamata ad Altrimenti che richiamerà regole che non corrispondono alla condizione:
When(customer => customer.IsPreferred, () => {
RuleFor(customer => customer.CustomerDiscount).GreaterThan(0);
RuleFor(customer => customer.CreditCardNumber).NotNull();
}).Otherwise(() => {
RuleFor(customer => customer.CustomerDiscount).Equal(0);
});