具有多个条件的条件验证
Conditional Validation with Multiple Conditions
我熟悉 FluentValidation 中使用 When
、Unless
和 Otherwise
的简单 conditional validation。这适用于在单一条件下进行验证。
我想根据 if-elseif-else 语句进行验证,但我无法确定如何进行验证。
我要实现
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 is only available with Products A or B"。
我已经通过拆分规则并设置守卫来解决类似的问题。
按照您的 if-else 伪代码:
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}");
我熟悉 FluentValidation 中使用 When
、Unless
和 Otherwise
的简单 conditional validation。这适用于在单一条件下进行验证。
我想根据 if-elseif-else 语句进行验证,但我无法确定如何进行验证。
我要实现
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 is only available with Products A or B"。
我已经通过拆分规则并设置守卫来解决类似的问题。
按照您的 if-else 伪代码:
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}");