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
для выполнения проверки. Эта новая перегрузка является актуальной, если ваша библиотека проверки интегрируется с системой проверки модели MVC ASP.NET Core.
Обсуждение этого вопроса см. на странице 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)
+ {
+ ...
}