MVC:ObjectModelValidator 调用 ValidationVisitor.Validate 的新重载

在 ASP.NET Core 5.0 中,添加了 ValidationVisitor.Validate 的重载。 新重载接受包含属性的顶级模型实例:

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

ObjectModelValidator 调用 ValidationVisitor 的新重载以执行验证。 如果验证库与 ASP.NET Core MVC 的模型验证系统集成,则此新重载是相关的。

有关讨论,请参阅 GitHub 问题 dotnet/aspnetcore#26020

已引入的版本

5.0

旧行为

ObjectModelValidator 在模型验证期间调用以下重载:

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

新行为

ObjectModelValidator 在模型验证期间调用以下重载:

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

更改原因

引入此更改是为了支持依赖于检查其他属性的验证程序,例如 CompareAttribute

依赖于 ObjectModelValidator 调用 ValidationVisitor 的现有重载的验证框架在面向 .NET 5 或更高版本时必须重写新方法:

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

受影响的 API

ValidationVisitor.Validate