2016-12-16 5 views
0

В документации WebAPI ODATA есть a page about Attribute Routing.При написании контроллера C# ODATA с ODataRoutePrefixAttribute, как привязать параметры к свойствам класса вместо параметра в методе?

На этой странице приведен пример использования 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() 
    { 
     ...... 
    } 
} 

Как получить значение параметра id из URL-адреса, если он не передан как параметр в метод действия?

ответ

0

я узнал, что я мог бы реализовать свойство геттер путем считывания значения из RequestContext.RouteData.Values:

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

Один недостаток этого решения заключается в том, что значения данных маршрута, кажется, не будут доступны во время метода Initialize контроллера , поэтому нужно быть осторожным, чтобы не зависеть от таких свойств.