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.
Rekommenderad åtgärd
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)
+ {
+ ...
}