5

我有一个实现 IValidatableObject 的视图模型,并且还有几个验证属性。当我尝试在我的 ApiController 上调用操作时,只执行属性验证。ASP.NET Web API 不支持 IValidatableObject 吗?对于无法由单个属性表示的复杂验证,有什么替代方法?

编辑:在某个地方,我一定是捏造了一些东西。验证神秘地开始按预期工作。看起来默认情况下肯定支持 IValidatableObject 。

4

3 回答 3

4

使用 Web API 2.1 (Microsoft.AspNet.WebApi nuget 5.1.x),如果任何验证属性无效,我就会遇到不调用 IValidatableObject 的 Validate 方法。因此,在调用该类的 Validate 方法之前,所有已应用到您的类的属性的验证属性必须首先作为有效属性传递。

例如,如果您有一个带有 的属性RequiredAttribute并且您没有在该字段中输入值,那么您的 IValidatableObject 的 Validate 方法的实现将不会被调用。虽然从技术上讲不是错误,但我希望每次验证时都会调用 Validate 方法。

于 2014-03-06T16:06:05.100 回答
1

尚未在 webapi 上尝试过 IValidatableObject,但根据文档应支持它,DataAnnotations (DataAnnotationsModelValidatorProvider) 的验证提供程序也提供 IValidatableObject 验证。见这里: http: //msdn.microsoft.com/en-us/library/system.web.http.validation.providers(v=vs.108)

无论如何,您也可以使用可用于装饰类的对象级 ValidationAttribute...它不像 IValidatableObject 那样简单,但应该可以工作。

于 2012-08-18T10:29:23.523 回答
0

截至目前,支持 IValidatableObject。

于 2013-12-30T21:52:12.873 回答