Share via


MVC: Llamada a una nueva sobrecarga de ValidationVisitor.Validate por parte de ObjectModelValidator

En ASP.NET Core 5.0, se ha agregado una sobrecarga de ValidationVisitor.Validate. La nueva sobrecarga acepta la instancia del modelo de nivel superior que contiene propiedades:

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

ObjectModelValidator invoca esta nueva sobrecarga de ValidationVisitor para llevar a cabo la validación. Esta nueva sobrecarga es pertinente en el caso de que su biblioteca de validaciones se integre con el sistema de validación de modelos de MVC para ASP.NET Core.

Para obtener información, vea la incidencia de GitHub n.º 26020 (dotnet/aspnetcore).

Versión introducida

5.0

Comportamiento anterior

ObjectModelValidator invoca la sobrecarga siguiente durante la validación de modelos:

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

Comportamiento nuevo

ObjectModelValidator invoca la sobrecarga siguiente durante la validación de modelos:

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

Motivo del cambio

Este cambio se ha aplicado para admitir validadores como CompareAttribute, que dependen de la inspección de otras propiedades.

Los marcos de validación que dependen de ObjectModelValidator para invocar la sobrecarga existente de ValidationVisitor deben invalidar el nuevo método al establecer como destino .NET 5 o una versión posterior:

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

API afectadas

ValidationVisitor.Validate