是否存在适用于多个属性总和的现有验证规则,其中总和不是 属性?
Is there an existing validation rule that works on the sum of several properties, where the sum is not a property?
假设我们有一个请求对象:
public class ExampleRequest {
public int? A { get; set; }
public int? B { get; set; }
public int? C { get; set; }
public int? D { get; set; }
...
}
并且存在一个 API 规则,其中 1 ≤ Sum(a, b, c, d) ≤ 10。
- Sum(a, b, c, d) 必须至少为 1,最多为 10。
我试过像这样实施这条规则:
RuleFor(x => x.A ?? 0 + x.B ?? 0 + x.C ?? 0 + x.D ?? 0)
.GreaterThan(0)
.LessThanOrEqualTo(10);
此规则无效。
a) 我如何制定规则集来处理这种情况?
b) 在这种情况下是否甚至可以创建规则——规则不一定应用于对象的 属性,而是应用于多个属性的某些函数?
编辑:编辑代码块以表示错误原因。
你的错误是因为Operator precedence。 +
的优先级高于 ??
。这应该有效:
RuleFor(x => (x.a ?? 0) + (x.b ?? 0) + (x.c ?? 0) + (x.d ?? 0) )
.GreaterThan(0)
.LessThanOrEqualTo(10);
假设我们有一个请求对象:
public class ExampleRequest {
public int? A { get; set; }
public int? B { get; set; }
public int? C { get; set; }
public int? D { get; set; }
...
}
并且存在一个 API 规则,其中 1 ≤ Sum(a, b, c, d) ≤ 10。
- Sum(a, b, c, d) 必须至少为 1,最多为 10。
我试过像这样实施这条规则:
RuleFor(x => x.A ?? 0 + x.B ?? 0 + x.C ?? 0 + x.D ?? 0)
.GreaterThan(0)
.LessThanOrEqualTo(10);
此规则无效。
a) 我如何制定规则集来处理这种情况?
b) 在这种情况下是否甚至可以创建规则——规则不一定应用于对象的 属性,而是应用于多个属性的某些函数?
编辑:编辑代码块以表示错误原因。
你的错误是因为Operator precedence。 +
的优先级高于 ??
。这应该有效:
RuleFor(x => (x.a ?? 0) + (x.b ?? 0) + (x.c ?? 0) + (x.d ?? 0) )
.GreaterThan(0)
.LessThanOrEqualTo(10);