MVC: ObjectModelValidator chiama un nuovo overload di ValidationVisitor.Validate

In ASP.NET Core 5.0 è stato aggiunto un overload di ValidationVisitor.Validate. Il nuovo overload accetta l'istanza del modello di primo livello che contiene le proprietà:

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

ObjectModelValidator richiama questo nuovo overload di ValidationVisitor per eseguire la convalida. Questo nuovo overload è pertinente se la libreria di convalida si integra con il sistema di convalida del modello di ASP.NET Core MVC.

Per informazioni, vedere il problema dotnet/aspnetcore#26020 di GitHub.

Versione introdotta

5.0

Comportamento precedente

ObjectModelValidator richiama l'overload seguente durante la convalida del modello:

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

Nuovo comportamento

ObjectModelValidator richiama l'overload seguente durante la convalida del modello:

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

Motivo della modifica

Questa modifica è stata introdotta per supportare i validator, ad esempio CompareAttribute, che si basano sull'ispezione di altre proprietà.

I framework di convalida che si basano su ObjectModelValidator per richiamare l'overload esistente di ValidationVisitor devono eseguire l'override del nuovo metodo quando la destinazione è .NET 5 o versione successiva:

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

API interessate

ValidationVisitor.Validate