我熟悉使用条件验证、Unless和Otherwise在FluentValidation中使用简单的When。这对于在单个条件下验证很好。
我想验证的基础上的一个if-否则-否则的语句,但我不能确定如何这样做。
我想要实现
if (product == Product.A)
{
// Validation for Product A
}
else if (product == Product.B)
{
// Validation for Product B
}
else
{
// Fail validation for other products
}如果我只想检查单个产品,例如产品A,那么我现在拥有的产品就能工作。
When(
order => order.Product == Product.A,
() =>
{
RuleFor(order => order.State)
.Must(
state => state == State.HI
|| state == State.AK)
.WithMessage("Product A only valid in Hawaii and Alaska.");
}).Otherwise(
() =>
{
RuleFor(order => order.Product)
.Equal(Product.A)
.WithMessage("Order only available with Product A.");
});我想要的是将产品A和B的多个When方法组合在一起,否则就会出现"Order只能与产品A或B一起使用“的消息。
发布于 2020-06-03 01:35:38
我已经解决了类似的问题,打破规则,并设置警卫他们。
遵循您的if- psuedo psuedo代码:
RuleFor(order => order.State)
.Must(state => state == State.HI || state == State.AK)
.WithMessage("Product A only valid in Hawaii and Alaska."))
.When(order => order.Product == Product.A);
RuleFor(order => order.State)
.Must(state => state == State.DC || state == State.CA)
.WithMessage("Product B only valid in Washington and California."))
.When(order => order.Product == Product.B);
// the not Product.A or Product.B case (I'm not sure what you want here) - but this
// demonstrates a kind of "meta" rule to be applied to the whole order
RuleFor(order => order)
.Must(order => order.Product == Product.A || order.Product == Product.B)
.WithName("Order")
.WithMessage(order => $"Order must be either {Product.A} or {Product.B}");https://stackoverflow.com/questions/62160882
复制相似问题