本文转自:
デフォルトの EntitySetController は複合キーをサポートしていません。したがって、複合キー モデルがある場合は、追加の作業が必要になります。これを行う方法の例を次に示します。
モデルはシンプルです:
リーリーこのモデルの odata URL は次のようになります:
リーリーそして、この URL に対する Web API アクションに強力な型指定されたパラメーターを含めたいと考えています。
リーリーFromODataUri モデル バインダー属性は、odata Uri 表現から clr 型への解析に使用されることに注意してください。 odata では、文字列値は「'xxx'」であり、それを「xxx」にしたいのです。
ルートを機能させるために、キー パスを解析するためのカスタム ルーティング規則を追加できます。実装例は次のとおりです:
リーリーこの規約は、エンティティ キーを処理するためのデフォルトの規約である EntityRoutingConvention から継承されます。 Base.SelectAction を呼び出すと、完全なキー パスが RouteValues に追加されます。新しい規則では、「,」が含まれているかどうかを確認し、それを複数のキーに分割し、それぞれをrouteValuesに設定します。したがって、Web API はアクションを選択するときに、それらの値を使用してどのアクションを選択するかを決定します。 「,」が見つからない場合は、基本的な対流と同じように動作します
コンベクションを登録するには、odata ルートをマッピングするときに設定する必要があります:
リーリー0の位置にルートを登録するのは、他のデフォルトルーティング伝達よりも先に実行されるようにするためです。したがって、デフォルトの EntityRoutingConvetion はその前に実行されません。その後、ルーティング作業ができるようになります。
それでは、複合キーの URL を構築するにはどうすればよいでしょうか?
ODataConventionModelBuilder を使用する場合、編集リンクと自己リンクを含む odata リンクについてはこれを行う必要はありません。複合キーが自動的に識別され、URI が構築されます。
ただし、場所ヘッダーのリンクを構築する必要があります。以下は、投稿リクエストを処理するための PeopleController.cs のサンプル コードです:
リーリーお役に立てば幸いです。
以上が[转]ASP.NET Web API OData で複合キーをサポートの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。