Bagikan melalui


MVC: ObjectModelValidator memanggil kelebihan beban baru ValidationVisitor.Validate

Dalam ASP.NET Core 5.0, kelebihan beban ValidationVisitor.Validate ditambahkan. Kelebihan beban baru menerima instans model tingkat atas yang berisi properti:

  bool Validate(ModelMetadata metadata, string key, object model, bool alwaysValidateAtTopLevel);
+ bool Validate(ModelMetadata metadata, string key, object model, bool alwaysValidateAtTopLevel, object container);

ObjectModelValidator memanggil kelebihan beban ValidationVisitor baru ini untuk melakukan validasi. Kelebihan beban baru ini berkaitan dengan jika pustaka validasi Anda terintegrasi dengan sistem validasi model ASP.NET Core MVC.

Untuk diskusi, lihat Masalah GitHub dotnet/aspnetcore#26020.

Versi yang diperkenalkan

5.0

Perilaku yang lama

ObjectModelValidator memanggil kelebihan beban berikut selama validasi model:

ValidationVisitor.Validate(ModelMetadata metadata, string key, object model, bool alwaysValidateAtTopLevel)

Perilaku yang baru

ObjectModelValidator memanggil kelebihan beban berikut selama validasi model:

ValidationVisitor.Validate(ModelMetadata metadata, string key, object model, bool alwaysValidateAtTopLevel, object container)

Alasan untuk berubah

Perubahan ini diperkenalkan untuk mendukung validator, seperti CompareAttribute, yang mengandalkan inspeksi properti lain.

Kerangka kerja validasi yang mengandalkan ObjectModelValidator untuk memanggil kelebihan beban ValidationVisitor yang ada harus mengambil alih metode baru saat menargetkan .NET 5 atau yang lebih baru:

public class MyCustomValidationVisitor : ValidationVisitor
{
+  public override bool Validate(ModelMetadata metadata, string key, object model, bool alwaysValidateAtTopLevel, object container)
+  {
+    ...
}

API yang Terpengaruh

ValidationVisitor.Validate