我有一个实现 IValidatableObject 的视图模型,并且还有几个验证属性。当我尝试在我的 ApiController 上调用操作时,只执行属性验证。ASP.NET Web API 不支持 IValidatableObject 吗?对于无法由单个属性表示的复杂验证,有什么替代方法?
编辑:在某个地方,我一定是捏造了一些东西。验证神秘地开始按预期工作。看起来默认情况下肯定支持 IValidatableObject 。
我有一个实现 IValidatableObject 的视图模型,并且还有几个验证属性。当我尝试在我的 ApiController 上调用操作时,只执行属性验证。ASP.NET Web API 不支持 IValidatableObject 吗?对于无法由单个属性表示的复杂验证,有什么替代方法?
编辑:在某个地方,我一定是捏造了一些东西。验证神秘地开始按预期工作。看起来默认情况下肯定支持 IValidatableObject 。
使用 Web API 2.1 (Microsoft.AspNet.WebApi nuget 5.1.x),如果任何验证属性无效,我就会遇到不调用 IValidatableObject 的 Validate 方法。因此,在调用该类的 Validate 方法之前,所有已应用到您的类的属性的验证属性必须首先作为有效属性传递。
例如,如果您有一个带有 的属性RequiredAttribute
并且您没有在该字段中输入值,那么您的 IValidatableObject 的 Validate 方法的实现将不会被调用。虽然从技术上讲不是错误,但我希望每次验证时都会调用 Validate 方法。
尚未在 webapi 上尝试过 IValidatableObject,但根据文档应支持它,DataAnnotations (DataAnnotationsModelValidatorProvider) 的验证提供程序也提供 IValidatableObject 验证。见这里: http: //msdn.microsoft.com/en-us/library/system.web.http.validation.providers(v=vs.108)
无论如何,您也可以使用可用于装饰类的对象级 ValidationAttribute...它不像 IValidatableObject 那样简单,但应该可以工作。
截至目前,支持 IValidatableObject。