C# 中的 FluentValidation - 使用另一个对象中的属性进行验证
FluentValidation in C# - Validation with properties in another object
我在 .NET Core 2.2 API 中有一个 class,我正在对其应用 Fluent Validation。 class 有一个整数 属性 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。 必须 允许您访问正在验证的模型,因此您可以在验证函数中访问模型的任何部分。它也是一种编写自定义验证的方法。
考虑到 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");
Must 有几个重载,一个期望以 属性 的值作为第一个参数和 returns 布尔值的函数。另一个采用两个参数,上下文中的模型,正在验证的 属性 的值和 returns 布尔值。
我在 .NET Core 2.2 API 中有一个 class,我正在对其应用 Fluent Validation。 class 有一个整数 属性 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。 必须 允许您访问正在验证的模型,因此您可以在验证函数中访问模型的任何部分。它也是一种编写自定义验证的方法。
考虑到 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");
Must 有几个重载,一个期望以 属性 的值作为第一个参数和 returns 布尔值的函数。另一个采用两个参数,上下文中的模型,正在验证的 属性 的值和 returns 布尔值。