如果我有以下规则:
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);
答案 0 :(得分:7)
你基本上就在那里。我想这就是你想要的:
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");
});