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

本文关键字:服务器端 验证 DataAnnotationsModelValidatorProvider 自定义 | 更新日期: 2024-09-24 02:45:36

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

CustomModelValidatorProvider.cs:

公共类CustomModelValidatorProvider:DataAnnotationsModelValidatorProvider{protected重写IEnumerable GetValidators(ModelMetadata元数据、ControllerContext上下文、IEnumeraable属性){//在此处设置数据存储中的属性返回基地。GetValidators(元数据、上下文、属性);}}

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

受保护的void Application_Start(){模型验证器提供程序。提供商。清除();模型验证器提供程序。提供商。添加(new CustomModelValidatorProvider());}

在Web API方法中,我有:

var validationResultList=新列表();bool valid=验证器。TryValidateObject(myModelObject,new ValidationContext(myModelObject,null,null),validationResultList,true);

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

我错过了一步吗?非常感谢您的帮助!

更新

当对象发布到控制器时,自定义验证器可以正常工作,但在发布到ApiController时不会被激发。

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

我终于明白了,这是一个非常简单的答案。ApiControllers只响应系统中的提供者。网状物Http。验证命名空间,而不是系统。网状物用于常规控制器和客户端验证的Mvc命名空间。

我在ApiControllers中同时实现了客户端验证和服务器验证。