亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

C# 中的 FluentValidation - 使用另一個對象中的屬性進行驗證

C# 中的 FluentValidation - 使用另一個對象中的屬性進行驗證

C#
千巷貓影 2023-07-09 17:11:20
我在 .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");

必須有幾個重載,一個重載需要將屬性值作為第一個參數并返回布爾值的函數。另一個接受兩個參數,上下文中的模型,正在驗證的屬性值并返回一個布爾值。


查看完整回答
反對 回復 2023-07-09
  • 1 回答
  • 0 關注
  • 224 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號