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

In ASP.NET Core 5.0 wurde eine Überladung von ValidationVisitor.Validate hinzugefügt. Die neue Überladung akzeptiert die oberste Modellinstanz, 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 für die Validierung auf. Diese neue Überladung ist relevant, wenn Ihre Validierungsbibliothek mit dem ASP.NET Core MVC-Modellvalidierungssystem integriert ist.

Weitere Informationen finden Sie im GitHub-Issue dotnet/aspnetcore#26020.

Eingeführt in Version

5.0

Altes Verhalten

ObjectModelValidator ruft während der Modellvalidierung die folgende Überladung auf:

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

Neues Verhalten

ObjectModelValidator ruft während der Modellvalidierung die folgende Überladung auf:

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

Grund für die Änderung

Diese Änderung wurde eingeführt, um Validierungssteuerelemente wie CompareAttribute zu unterstützen, die von der Überprüfung anderer Eigenschaften abhängig sind.

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