2016-12-16 9 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에서 값을 읽어 속성 게터를 구현할 수 있다는 것을 발견

이 솔루션의
public string Id => (string)this.RequestContext.RouteData.Values["id"]; 

한 가지 단점은 경로 데이터 값이 컨트롤러의 초기화 방법 중에 사용할 수하지 않는 것입니다 , 그래서 거기에 그런 속성에 의존하지 않도록 조심해야합니다.