首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多条件条件验证

多条件条件验证
EN

Stack Overflow用户
提问于 2020-06-02 20:28:57
回答 1查看 971关注 0票数 2

我熟悉使用条件验证UnlessOtherwise在FluentValidation中使用简单的When。这对于在单个条件下验证很好。

我想验证的基础上的一个if-否则-否则的语句,但我不能确定如何这样做。

我想要实现

代码语言:javascript
复制
if (product == Product.A)
{
    // Validation for Product A
}
else if (product == Product.B)
{
    // Validation for Product B
}
else
{
    // Fail validation for other products
}

如果我只想检查单个产品,例如产品A,那么我现在拥有的产品就能工作。

代码语言:javascript
复制
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一起使用“的消息。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-03 01:35:38

我已经解决了类似的问题,打破规则,并设置警卫他们。

遵循您的if- psuedo psuedo代码:

代码语言:javascript
复制
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}");
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62160882

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档