2016-12-16 5 views
0

ODATAのWebAPIの文書にはa page about Attribute Routingがあります。ODataRoutePrefixAttributeを使用してC#ODATAコントローラを作成する場合、メソッドのパラメータではなくクラスのプロパティにパラメータをバインドする方法はありますか?

このページでは、特定のコントローラへのすべての要求が同じプレフィックスを持つ場合にODataRoutePrefixAttributeを使用する例があり、このプレフィックスにはパラメータを含めることができます。このサンプルでは、​​すべてのアクションメソッドが同じパラメーターを宣言しています。そのサンプルから:

[ODataRoutePrefix("Customers({id})")] 
public class MyController : ODataController 
{ 
    [ODataRoute("Address")] 
    public IHttpActionResult GetAddress(int id) 
    { 
     ...... 
    } 

    [ODataRoute("Address/City")] 
    public IHttpActionResult GetCity(int id) 
    { 
     ...... 
    } 

    [ODataRoute("/Order")] 
    public IHttpActionResult GetOrder(int id) 
    { 
     ...... 
    } 
} 

Iはそれぞれ、すべてのメソッドにパラメータを繰り返さないようしたいとちょうどそれはこのように、クラスの特性である必要があります:

[ODataRoutePrefix("Customers({id})")] 
public class MyController : ODataController 
{ 
    public int Id 
    { 
     get { ... } 
    } 

    [ODataRoute("Address")] 
    public IHttpActionResult GetAddress() 
    { 
     ...... 
    } 
} 

値を取得する方法パラメータとしてアクションメソッドに渡されない場合のURLからのidパラメータの

答えて

0

私はRequestContext.RouteData.Valuesから値を読み出すことにより、プロパティのゲッターを実装できることが判明:

public string Id => (string)this.RequestContext.RouteData.Values["id"]; 

この解決策の欠点の1つは、経路データ値は、コントローラの初期化メソッドの間に利用できるようにしていないようだということですしたがって、そこにそのような特性に依存しないように慎重にする必要があります。

関連する問題