Freigeben über


MVC: ObjectModelValidator ruft eine neue Überladung von ValidationVisitor.Validate auf

In ASP.NET Core 5.0 wurde eine Überladung des ValidationVisitor.Validate Elements hinzugefügt. Die neue Überladung akzeptiert die Modellinstanz der obersten Ebene, die Eigenschaften enthält:

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

ObjectModelValidator ruft diese neue Überladung von ValidationVisitor zur Durchführung der Validierung auf. Diese neue Überladung ist relevant, wenn Ihre Validierungsbibliothek in ASP.NET Core MVC Modellüberprüfungssystem integriert ist.

Eine Diskussion finden Sie unter GitHub issue dotnet/aspnetcore#26020.

Eingeführte Version

5.0

Altes Verhalten

ObjectModelValidator ruft während der Modellüberprüfung die folgende Überladung auf:

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

Neues Verhalten

ObjectModelValidator ruft während der Modellüberprüfung die folgende Überladung auf:

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

Grund für Änderung

Diese Änderung wurde eingeführt, um Validatoren, wie CompareAttribute, die auf die Überprüfung anderer Eigenschaften angewiesen sind, zu unterstützen.

Validierungsframeworks, die ObjectModelValidator benötigen, um die vorhandene Überladung von ValidationVisitor aufzurufen, müssen die neue Methode überschreiben, wenn .NET 5 oder höher als Zielversion verwendet wird:

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

Betroffene APIs

ValidationVisitor.Validate