我已经设置了一个自定义提供程序,以允许从数据存储而不是静态代码中设置验证属性。在我的 .NET MVC 4 项目中非常适合客户端验证,但我无法让服务器端验证正常工作。
CustomModelValidatorProvider .cs:
公共类 CustomModelValidatorProvider : DataAnnotationsModelValidatorProvider { protected override IEnumerable GetValidators(ModelMetadata 元数据,ControllerContext 上下文,IEnumerable 属性) { // 在此处从数据存储区设置属性 返回 base.GetValidators(元数据、上下文、属性); } }
在我的 Global.asax.cs 我有:
受保护的无效 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);
在这里,valid 总是正确的。即使 Jquery 客户端验证显示错误。在服务器端,我的自定义提供程序未用于应用数据注释。当我在 GetValidators() 中设置断点时,它会在创建视图并正确显示客户端验证器时调用,但在模型绑定到控制器时不会再次调用。
我错过了一步吗?任何帮助是极大的赞赏!
更新
自定义验证器在对象发布到 Controller 时正常工作,但在发布到 ApiController 时不会被触发。