【问题标题】:How to add multiple IF conditions in one rule?如何在一条规则中添加多个 IF 条件?
【发布时间】:2016-05-06 00:30:37
【问题描述】:

如果我有以下规则:

if (a == true && b == 0)
   return errorsenum.somerror1;
else if (b < c)
   return errorsenum.somerror2;

如何将上述内容作为 FluentValidation 规则实现?

编辑:

这两条规则会起作用吗?

RuleFor(x => x.b).GreaterThan(0).When(x => x.a);
RuleFor(x => x.b).GreaterThanOrEqualTo(x => x.c);

【问题讨论】:

  • 你可能会得到错误 all code path should return a value;可以发一下方法吗?
  • @un-lucky 以上只是规则设计的伪代码。我需要该规则作为 FluentValidation 规则。
  • 那么问题是只需要一个为真,然后返回不同的验证错误?

标签: c# fluentvalidation


【解决方案1】:

你基本上就在那里。我想这就是你想要的:

RuleFor(x => x.b).GreaterThan(0).When(x => x.a).WithMessage("SomeError1");
RuleFor(x => x.b).GreaterThanOrEqualTo(x => x.c).When(x => !x.a).WithMessage("SomeError2");

所以只需过滤第二条规则,使其仅在“a”为 false 时运行,并将自定义消息添加到每个规则中。

Fluent 验证总是会执行所有规则,即使第一个规则失败,所以如果你想有选择性,你需要继续使用 When()。

如果您有一堆规则要验证何时为 == true,则可以改用此模式:

When(x => x.a, () =>
{
    RuleFor(x => x.b).GreaterThan(0).WithMessage("SomeError1");
    RuleFor(x => x.c).LessThan(0).WithMessage("SomeError3");
});

【讨论】:

    猜你喜欢
    • 2018-05-09
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    • 2017-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-04
    相关资源
    最近更新 更多