使用自定义DataAnnotationsModelValidatorProvider进行服务器端validation

我已经设置了一个自定义提供程序,允许从数据存储而不是静态代码中设置validation属性。 在我的.NET MVC 4项目中使用客户端validation很好用,但我无法让服务器端validation工作。

CustomModelValidatorProvider .cs:


     public class CustomModelValidatorProvider:DataAnnotationsModelValidatorProvider
     {
         protected override IEnumerable GetValidators(ModelMetadata元数据,ControllerContext上下文,IEnumerable属性)
         {
             //在这里设置数据存储区的属性

             return base.GetValidators(元数据,上下文,属性);
         }
     }

在我的Global.asax.cs中,我有:


     protected void Application_Start()
     {
         ModelValidatorProviders.Providers.Clear();
         ModelValidatorProviders.Providers.Add(new CustomModelValidatorProvider());
     }

在Web API方法中,我有:


     var validationResultList = new List();
     bool valid = Validator.TryValidateObject(myModelObject,new ValidationContext(myModelObject,null,null),validationResultList,true);

在这里,有效总是如此。 即使Jquery客户端validation显示错误。 在服务器端,我的自定义提供程序不用于应用数据注释。 当我在GetValidators()中设置断点时,在创建View时调用它并正确显示客户端validation器,但是当模型绑定到控制器时不会再次调用它。

我错过了一步吗? 任何帮助是极大的赞赏!

UPDATE

当对象发布到Controller时,自定义validation器可以正常工作,但在发布到ApiController时不会被触发。

我终于弄明白了,这是一个非常简单的答案。 ApiControllers仅响应System.Web.Http.Validation命名空间中的提供程序,而不响应用于常规控制器和客户端validation的System.Web.Mvc命名空间。

我实现了两者以实现ApiControllers中的客户端validation和服务器validation。