ASP.NET Web API是否支持IValidatableObject?

时间:2012-08-13 19:17:28

标签: validation asp.net-web-api data-annotations ivalidatableobject

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

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

3 个答案:

答案 0 :(得分:4)

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

例如,如果您拥有RequiredAttribute的属性并且未在该字段中放置值,则不会调用IValidatableObject的Validate方法的实现。虽然从技术上讲不是一个bug,但我希望每次验证时都会调用Validate方法。

答案 1 :(得分:1)

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

无论如何,您还可以使用可用于修饰类的对象级ValidationAttribute ...它不像IValidatableObject那么容易,但是应该可以工作。

答案 2 :(得分:0)

截至目前,支持IValidatableObject。