5

我有一个实现IValidatableObject视图模型,也有几个验证属性。当我尝试在我的ApiController上调用一个动作时,只执行属性验证。 ASP.NET Web API是否不支持IValidatableObject?复杂验证的另一种选择不能由单一属性来表示?ASP.NET web API支持IValidatableObject吗?

编辑:某处沿线,我一定已经搞砸了。验证神秘地开始按预期工作。看起来像默认支持IValidatableObject。

回答

1

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

无论如何,你也可以使用对象级别的ValidationAttribute,你可以用来装饰一个类...它不像IValidatableObject那么容易,但应该工作。

0

截止目前,支持IValidatableObject。

4

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

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

+0

我想你的意思是WebAPI 2?它通常与MVC 5打包在一起。无论哪种方式,你遇到的是预期的行为。我用dotPeek来验证这种行为。在其中一个类中有一个if语句。超级讨厌。 – 2015-07-21 16:24:22

+0

你说得对,我指的是Web API 2,但是我引用了nuget包版本。我澄清了我的答案的一部分。感谢您的反馈。 – 2015-07-27 15:45:42

相关问题