自定义 DataAnnotationsModelValidatorProvider 未触发

发布于 2025-01-08 15:37:16 字数 690 浏览 5 评论 0原文

我创建了一个自定义 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 方法中放置了一个断点,但是它永远不会被击中。我的理解是,应该为模型中的每个属性执行此自定义验证器提供程序。我错过了什么吗?

I've created a custom 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);
    }
}

And I've registered it in my Global.asax:

ModelValidatorProviders.Providers.Add(new CustomValidatorProvider());

I put a breakpoint in the GetValidators method but it is never hit. My understanding is that this custom validator provider should be executed for each property in my model. Am I missing something?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

南薇 2025-01-15 15:37:16

我认为您需要从 ModelValidatorProvider 而不是 DataAnnotationsModelValidatorProvider 进行覆盖。并且方法签名不应该有 attribute 参数并且应该是公共的:

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);
    }
}

I think you need to override from ModelValidatorProvider and not DataAnnotationsModelValidatorProvider. And the method signature should not have the attributes parameter and should be 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);
    }
}
┈┾☆殇 2025-01-15 15:37:16

ModelValidatorProviders.Providers 已包含 DataAnnotationsModelValidatorProvider。

只需在添加自定义 DataAnnotationsModelValidatorProvider 之前将其删除即可。

ModelValidatorProviders.Providers.Remove(ModelValidatorProviders.Providers.OfType<DataAnnotationsModelValidatorProvider>().First());

ModelValidatorProviders.Providers.Add(new DependencyResolverModelValidatorProvider());

ModelValidatorProviders.Providers already contain a DataAnnotationsModelValidatorProvider.

Simply remove it before adding your custom DataAnnotationsModelValidatorProvider.

ModelValidatorProviders.Providers.Remove(ModelValidatorProviders.Providers.OfType<DataAnnotationsModelValidatorProvider>().First());

ModelValidatorProviders.Providers.Add(new DependencyResolverModelValidatorProvider());
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文