MVC: ObjectModelValidator chama nova sobrecarga de ValidationVisitor.Validate
Em ASP.NET Core 5.0, uma sobrecarga de ValidationVisitor.Validate foi adicionada. A nova sobrecarga aceita a instância de modelo de nível superior que contém propriedades:
bool Validate(ModelMetadata metadata, string key, object model, bool alwaysValidateAtTopLevel);
+ bool Validate(ModelMetadata metadata, string key, object model, bool alwaysValidateAtTopLevel, object container);
ObjectModelValidator invoca essa nova sobrecarga de ValidationVisitor
para executar a validação. Essa nova sobrecarga será pertinente se sua biblioteca de validação se integrar ao sistema de validação de modelo do MVC do ASP.NET Core.
Para discussão, confira o problema do GitHub dotnet/aspnetcore#26020.
Versão introduzida
5,0
Comportamento antigo
ObjectModelValidator
invoca a seguinte sobrecarga durante a validação do modelo:
ValidationVisitor.Validate(ModelMetadata metadata, string key, object model, bool alwaysValidateAtTopLevel)
Novo comportamento
ObjectModelValidator
invoca a seguinte sobrecarga durante a validação do modelo:
ValidationVisitor.Validate(ModelMetadata metadata, string key, object model, bool alwaysValidateAtTopLevel, object container)
Motivo da alteração
Essa alteração foi introduzida para dar suporte a validadores, como CompareAttribute, que dependem da inspeção de outras propriedades.
Ação recomendada
As estruturas de validação que dependem de ObjectModelValidator
para invocar a sobrecarga existente de ValidationVisitor
devem substituir o novo método ao ser direcionado ao .NET 5 ou versão posterior:
public class MyCustomValidationVisitor : ValidationVisitor
{
+ public override bool Validate(ModelMetadata metadata, string key, object model, bool alwaysValidateAtTopLevel, object container)
+ {
+ ...
}