Partilhar via


MVC: ObjectModelValidator chama uma nova sobrecarga do ValidationVisitor.Validate

No ASP.NET Core 5.0, uma sobrecarga do ValidationVisitor.Validate foi adicionada. A nova sobrecarga aceita a instância de modelo de nível superior que contém múltiplas 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 é pertinente se sua biblioteca de validação se integrar ao sistema de validação de modelo do ASP.NET Core MVC.

Para discussão, consulte GitHub issue 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 mudança

Esta alteração foi introduzida para dar suporte a validadores, como CompareAttribute, que dependem da inspeção de outras propriedades.

As frameworks de validação que dependem de ObjectModelValidator para invocar a sobrecarga existente de ValidationVisitor devem sobrepor o novo método ao direcionar para o .NET 5 ou posterior.

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

APIs afetadas

ValidationVisitor.Validate