2016-12-16 48 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) 
    { 
     ...... 
    } 
} 

我想,以避免重複每個參數和每一個方法,只是有它是類的屬性,如:

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

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

如何獲得價值當它沒有作爲參數傳遞給操作方法時,URL中的id參數的值?

回答

0

我發現我可以通過讀取RequestContext.RouteData.Values價值實現屬性getter:

該解決方案的
public string Id => (string)this.RequestContext.RouteData.Values["id"]; 

一個缺點是看起來路由數據值不可用控制器的初始化方法中,所以需要謹慎,不要依賴於這些房產。