MVC: ObjectModelValidator wywołuje nowe przeciążenie elementu ValidationVisitor.Validate
W ASP.NET Core 5.0 dodano przeciążenie ValidationVisitor.Validate elementu . Nowe przeciążenie akceptuje wystąpienie modelu najwyższego poziomu zawierające właściwości:
bool Validate(ModelMetadata metadata, string key, object model, bool alwaysValidateAtTopLevel);
+ bool Validate(ModelMetadata metadata, string key, object model, bool alwaysValidateAtTopLevel, object container);
ObjectModelValidator wywołuje to nowe przeciążenie , ValidationVisitor
aby przeprowadzić walidację. To nowe przeciążenie jest istotne, jeśli biblioteka walidacji jest zintegrowana z systemem weryfikacji modelu platformy ASP.NET Core MVC.
Aby zapoznać się z dyskusją, zobacz problem z usługą GitHub dotnet/aspnetcore#26020.
Wprowadzona wersja
5,0
Stare zachowanie
ObjectModelValidator
wywołuje następujące przeciążenie podczas walidacji modelu:
ValidationVisitor.Validate(ModelMetadata metadata, string key, object model, bool alwaysValidateAtTopLevel)
Nowe zachowanie
ObjectModelValidator
wywołuje następujące przeciążenie podczas walidacji modelu:
ValidationVisitor.Validate(ModelMetadata metadata, string key, object model, bool alwaysValidateAtTopLevel, object container)
Przyczyna wprowadzenia zmiany
Ta zmiana została wprowadzona w celu obsługi modułów sprawdzania poprawności, takich jak CompareAttribute, które polegają na inspekcji innych właściwości.
Zalecana akcja
Struktury weryfikacji, które polegają na ObjectModelValidator
wywołaniu istniejącego ValidationVisitor
przeciążenia, muszą zastąpić nową metodę w przypadku określania wartości docelowej dla platformy .NET 5 lub nowszej:
public class MyCustomValidationVisitor : ValidationVisitor
{
+ public override bool Validate(ModelMetadata metadata, string key, object model, bool alwaysValidateAtTopLevel, object container)
+ {
+ ...
}