在 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)
+ {
+ ...
}