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メソッドが呼び出されませんでした。したがって、クラスのプロパティに適用されたすべての検証属性は、そのクラスのValidateメソッドが呼び出される前に、有効なものとして最初に渡されなければなりません。

たとえば、RequiredAttributeのプロパティを持ち、そのフィールドに値を入れない場合、IValidatableObjectのValidateメソッドの実装は呼び出されません。技術的にはバグではありませんが、検証するたびにValidateメソッドが呼び出されると思いました。

+0

私はあなたがWebAPI 2を意味すると思いますか?いずれにしても、あなたが経験したのは期待される動作です。この動作を確認するためにdotPeekを使用しました。いずれかのクラスのどこかにifステートメントがあります。超不快な。 –

+0

あなたはそうです、私はWeb API 2を指していましたが、私はnugetパッケージのバージョンを参照していました。私はその答えの一部を明確にしました。フィードバックをお寄せいただきありがとうございます。 –

関連する問題