Dela via


MVC: ObjectModelValidator anropar en ny överlagring av ValidationVisitor.Validate

I ASP.NET Core 5.0 lades en överlagring av till ValidationVisitor.Validate . Den nya överlagringen accepterar den översta modellinstansen som innehåller egenskaper:

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

ObjectModelValidator anropar den här nya överlagringen av ValidationVisitor för att utföra validering. Den här nya överlagringen är relevant om valideringsbiblioteket integreras med ASP.NET Core MVC:s modellverifieringssystem.

Mer information finns i GitHub-problem med dotnet/aspnetcore#26020.

Version introducerad

5,0

Gammalt beteende

ObjectModelValidator anropar följande överlagring under modellverifieringen:

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

Nytt beteende

ObjectModelValidator anropar följande överlagring under modellverifieringen:

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

Orsak till ändringen

Den här ändringen infördes för att stödja validatorer, till exempel , som CompareAttributeförlitar sig på kontroll av andra egenskaper.

Valideringsramverk som förlitar sig på att anropa den befintliga överbelastningen av ValidationVisitor måste åsidosätta den nya metoden när du riktar in dig på ObjectModelValidator .NET 5 eller senare:

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

Berörda API:er

ValidationVisitor.Validate