aspnetcore/breaking-changes/5/mvc-objectmodelvalidator-calls-new-overload.md
In ASP.NET Core 5.0, an overload of the xref:Microsoft.AspNetCore.Mvc.ModelBinding.Validation.ValidationVisitor.Validate%2A?displayProperty=nameWithType was added. The new overload accepts the top-level model instance that contains properties:
bool Validate(ModelMetadata metadata, string key, object model, bool alwaysValidateAtTopLevel);
+ bool Validate(ModelMetadata metadata, string key, object model, bool alwaysValidateAtTopLevel, object container);
xref:Microsoft.AspNetCore.Mvc.ModelBinding.ObjectModelValidator invokes this new overload of ValidationVisitor to perform validation. This new overload is pertinent if your validation library integrates with ASP.NET Core MVC's model validation system.
For discussion, see GitHub issue dotnet/aspnetcore#26020.
5.0
ObjectModelValidator invokes the following overload during model validation:
ValidationVisitor.Validate(ModelMetadata metadata, string key, object model, bool alwaysValidateAtTopLevel)
ObjectModelValidator invokes the following overload during model validation:
ValidationVisitor.Validate(ModelMetadata metadata, string key, object model, bool alwaysValidateAtTopLevel, object container)
This change was introduced to support validators, such as xref:System.ComponentModel.DataAnnotations.CompareAttribute, that rely on inspection of other properties.
Validation frameworks that rely on ObjectModelValidator to invoke the existing overload of ValidationVisitor must override the new method when targeting .NET 5 or later:
public class MyCustomValidationVisitor : ValidationVisitor
{
+ public override bool Validate(ModelMetadata metadata, string key, object model, bool alwaysValidateAtTopLevel, object container)
+ {
+ ...
}