Sdílet prostřednictvím


MVC: ObjectModelValidator volá nové přetížení ValidationVisitor.Validate

V ASP.NET Core 5.0 byla přidána přetížení ValidationVisitor.Validate . Nové přetížení přijímá instanci modelu nejvyšší úrovně, která obsahuje vlastnosti:

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

ObjectModelValidator vyvolá toto nové přetížení ValidationVisitor k provedení ověření. Toto nové přetížení je relevantní, pokud se vaše ověřovací knihovna integruje se systémem ověřování modelů ASP.NET Core MVC.

Diskuzi najdete v tématu o problému GitHubu dotnet/aspnetcore#26020.

Zavedená verze

5,0

Staré chování

ObjectModelValidator vyvolá následující přetížení během ověřování modelu:

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

Nové chování

ObjectModelValidator vyvolá následující přetížení během ověřování modelu:

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

Důvod změny

Tato změna byla zavedena pro validátory podpory, například CompareAttribute, které spoléhají na kontrolu jiných vlastností.

Ověřovací architektury, které spoléhají na ObjectModelValidator vyvolání existujícího přetížení ValidationVisitor , musí při cílení na .NET 5 nebo novější přepsat novou metodu:

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

Ovlivněná rozhraní API

ValidationVisitor.Validate