MVC : ObjectModelValidator appelle une nouvelle surcharge de ValidationVisitor.Validate

Dans ASP.NET Core 5.0, une surcharge de ValidationVisitor.Validate a été ajoutée. La nouvelle surcharge accepte l’instance de modèle de niveau supérieur qui contient des propriétés :

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

ObjectModelValidator appelle cette nouvelle surcharge de ValidationVisitor pour effectuer la validation. Cette nouvelle surcharge est pertinente si votre bibliothèque de validation s’intègre au système de validation de modèle MVC ASP.NET Core.

Pour plus d’informations, consultez le problème GitHub dotnet/aspnetcore#26020.

Version introduite

5,0

Ancien comportement

ObjectModelValidator appelle la surcharge suivante pendant la validation du modèle :

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

Nouveau comportement

ObjectModelValidator appelle la surcharge suivante pendant la validation du modèle :

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

Raison du changement

Cette modification a été introduite pour prendre en charge les validateurs, comme CompareAttribute, qui s’appuient sur l’inspection d’autres propriétés.

Les frameworks de validation qui s’appuient sur ObjectModelValidator pour appeler la surcharge existante de ValidationVisitor doivent remplacer la nouvelle méthode lors du ciblage de .NET 5 ou version ultérieure :

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

API affectées

ValidationVisitor.Validate