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.
Empfohlene Maßnahme
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)
+ {
+ ...
}