共用方式為


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)
+  {
+    ...
}

受影響的 API

ValidationVisitor.Validate