我在 .NET Core 2.2 API 中有一個類,我正在對其應用 Fluent Validation。該類具有整數屬性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按預期工作。
1 回答

慕哥6287543
TA貢獻1831條經驗 獲得超10個贊
也許何時可以在這里解決您當前的需求。但如果您需要編寫更復雜的驗證,那么您可以使用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");
必須有幾個重載,一個重載需要將屬性值作為第一個參數并返回布爾值的函數。另一個接受兩個參數,上下文中的模型,正在驗證的屬性值并返回一個布爾值。
- 1 回答
- 0 關注
- 224 瀏覽
添加回答
舉報
0/150
提交
取消