5

IValidatableObjectを実装し、いくつかの検証属性も持つビューモデルがあります。ApiControllerでアクションを呼び出そうとすると、属性の検証のみが実行されます。ASP.NET Web APIはIValidatableObjectをサポートしていませんか?単一の属性では表現できない複雑な検証の代替手段は何ですか?

編集:どこかで、私は何かをいじくりまわしたに違いありません。検証は不思議なことに期待どおりに機能し始めました。IValidatableObjectはデフォルトで確実にサポートされているようです。

4

3 に答える 3

4

Web API 2.1 (Microsoft.AspNet.WebApi nuget 5.1.x) では、検証属性のいずれかが無効な場合、IValidatableObject の Validate メソッドが呼び出されないことがありました。したがって、クラスのプロパティに適用されたすべての検証属性は、そのクラスの Validate メソッドが呼び出される前に、まず有効として渡される必要があります。

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

于 2014-03-06T16:06:05.100 に答える
1

まだ webapi で IValidatableObject を試していませんが、DataAnnotations の検証プロバイダー (DataAnnotationsModelValidatorProvider) が IValidatableObject 検証も提供するドキュメントに従ってサポートする必要があります。ここを参照してください: http://msdn.microsoft.com/en-us/library/system.web.http.validation.providers(v=vs.108)

とにかく、クラスを装飾するために使用できるオブジェクトレベルの ValidationAttribute も使用できます... IValidatableObject ほど簡単ではありませんが、機能するはずです。

于 2012-08-18T10:29:23.523 に答える