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