MVC:ObjectModelValidator 呼叫 ValidationVisitor.Validate 的新多載
在 ASP.NET Core 5.0 中,已新增 ValidationVisitor.Validate 的多載。 新的多載會接受包含屬性的最上層模型執行個體:
bool Validate(ModelMetadata metadata, string key, object model, bool alwaysValidateAtTopLevel);
+ bool Validate(ModelMetadata metadata, string key, object model, bool alwaysValidateAtTopLevel, object container);
ObjectModelValidator 會叫用 ValidationVisitor
的這個新多載來執行驗證。 如果您的驗證程式庫與 ASP.NET Core MVC 的模型驗證系統整合,則這個新的多載有關聯性。
若要查看討論內容,請參閱 GitHub 問題 dotnet/aspnetcore#26020 (英文)。
導入的版本
5.0
舊的行為
ObjectModelValidator
在模型驗證期間叫用下列多載:
ValidationVisitor.Validate(ModelMetadata metadata, string key, object model, bool alwaysValidateAtTopLevel)
新的行為
ObjectModelValidator
在模型驗證期間叫用下列多載:
ValidationVisitor.Validate(ModelMetadata metadata, string key, object model, bool alwaysValidateAtTopLevel, object container)
變更原因
引進這項變更是為了支援依賴其他屬性檢查的驗證程式,例如 CompareAttribute。
建議的動作
依賴 ObjectModelValidator
叫用 ValidationVisitor
的現有多載所用的驗證架構必須在目標為 .NET 5 或更新版本時覆寫新的方法:
public class MyCustomValidationVisitor : ValidationVisitor
{
+ public override bool Validate(ModelMetadata metadata, string key, object model, bool alwaysValidateAtTopLevel, object container)
+ {
+ ...
}