Fluent validation obsługuje walidację warunkową, po prostu użyj klauzuli When, aby sprawdzić wartość pola dodatkowego:
https://fluentvalidation.net/start#conditions
Określanie warunku za pomocą When / Unless Metody When i Unless mogą służyć do określania warunków określających, kiedy reguła ma być wykonywana. Na przykład ta reguła dotycząca właściwości CustomerDiscount będzie wykonywana tylko wtedy, gdy wartość IsPreferredCustomer jest prawdziwe:
RuleFor(customer => customer.CustomerDiscount)
.GreaterThan(0)
.When(customer => customer.IsPreferredCustomer);
Metoda Unless jest po prostu przeciwieństwem When.
Możesz także użyć operacji .SetValidator do zdefiniowania niestandardowego walidatora, który działa na warunku NotEmpty.
RuleFor(customer => customer.CustomerDiscount)
.GreaterThan(0)
.SetValidator(New MyCustomerDiscountValidator);
Jeśli chcesz określić ten sam warunek dla wielu reguł, możesz wywołać metodę When najwyższego poziomu zamiast łączyć wywołanie When na końcu reguły:
When(customer => customer.IsPreferred, () => {
RuleFor(customer => customer.CustomerDiscount).GreaterThan(0);
RuleFor(customer => customer.CreditCardNumber).NotNull();
});
Tym razem warunek zostanie zastosowany do obu reguł. Możesz również połączyć wywołanie Otherwise, co spowoduje wywołanie reguł, które nie spełniają warunku:
When(customer => customer.IsPreferred, () => {
RuleFor(customer => customer.CustomerDiscount).GreaterThan(0);
RuleFor(customer => customer.CreditCardNumber).NotNull();
}).Otherwise(() => {
RuleFor(customer => customer.CustomerDiscount).Equal(0);
});