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