我在 .NET Core 2.2 API 中有一个类,我正在对其应用 Fluent 验证。该类具有整数属性public int? PurchasePrice {get;set;}
。
此属性的父级的父级有一个枚举,我想要做的是当该枚举的值为 4 时,将此PurchasePrice
字段设为必需。
我已经开始编写自定义规则,如下所示:-
RuleFor(pd => pd.PurchasePrice).Custom((a, context) =>
{
var parent = context.ParentContext.InstanceToValidate as ParentObject;
var parentOfParent = context.ParentContext.ParentContext.InstanceToValidate as GrandParentObject;
});
但是,第二个 ParentContext 在 Intellisense 中根本不存在,并且由于无法识别它也会引发编译错误。
在编写验证规则时,我是否在遍历对象结构方面走错了路?
提前致谢!
注意:检索行var parent
按预期工作。
也许何时可以在这里解决您当前的需求。但是,如果您需要编写更复杂的验证,则可以使用Must。Must允许您访问正在验证的模型,因此您可以在验证函数中访问模型的任何部分。这也是一种编写自定义验证的方式。
考虑到 AdbstractValidator 的类型是父类型(又名模型),其中所述枚举属性是您可以使用Must如下:
RuleFor(pd => pd.PurchasePrice)
.Must((model, price) =>
{
return model.enum == enum.value && price != null;
})
.WithMessage("Price is required when enum is of value");
必须有几个重载,一个期望以属性值作为第一个参数的函数并返回布尔值。另一个需要两个参数,上下文中的模型,正在验证的属性值并返回一个布尔值。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句