我创建了一个自定义DataAnnotationsModelValidatorProvider
:
public class CustomValidatorProvider : DataAnnotationsModelValidatorProvider
{
protected override IEnumerable<ModelValidator> GetValidators(ModelMetadata metadata, ControllerContext context, IEnumerable<Attribute> attributes)
{
//Do custom stuff...
return base.GetValidators(metadata, context, attributes);
}
}
我已在我的Global.asax
注册了它:
ModelValidatorProviders.Providers.Add(new CustomValidatorProvider());
我在GetValidators
方法中放了一个断点,但它永远不会被击中。我的理解是应该为我的模型中的每个属性执行此自定义验证器提供程序。我错过了什么吗?
答案 0 :(得分:0)
我认为您需要覆盖ModelValidatorProvider
而不是DataAnnotationsModelValidatorProvider
。并且方法签名不应该具有attributes参数,并且应该是public:
public class CustomValidatorProvider : ModelValidatorProvider
{
public override IEnumerable<ModelValidator> GetValidators(ModelMetadata metadata, ControllerContext context)
{
//Do custom stuff...
//You cannot call the base here as ModelValidatorProvider is abstract.
//return base.GetValidators(metadata, context);
}
}
答案 1 :(得分:0)
ModelValidatorProviders.Providers已经包含DataAnnotationsModelValidatorProvider。
在添加自定义DataAnnotationsModelValidatorProvider之前,只需删除它。
ModelValidatorProviders.Providers.Remove(ModelValidatorProviders.Providers.OfType<DataAnnotationsModelValidatorProvider>().First());
ModelValidatorProviders.Providers.Add(new DependencyResolverModelValidatorProvider());