【问题标题】:Does ASP.NET web API support IValidatableObject?ASP.NET Web API 是否支持 IValidatableObject?
【发布时间】:2012-08-10 01:37:06
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 我认为您的意思是 WebAPI 2?这通常与 MVC 5 打包在一起。无论哪种方式,您所经历的都是预期的行为。我使用 dotPeek 来验证这种行为。在其中一个类中的某处有一个 if 语句。超级讨厌。
    • 你说得对,我指的是 Web API 2,但我指的是 nuget 包版本。我已经澄清了我的答案的那一部分。感谢您的反馈。
    【解决方案2】:

    目前,支持 IValidatableObject。

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-05-23
        • 2014-11-19
        • 1970-01-01
        • 1970-01-01
        • 2014-01-14
        • 2013-06-24
        • 2012-06-20
        • 2021-11-01
        相关资源
        最近更新 更多