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
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈