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à.
Azione consigliata
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)
+ {
+ ...
}