2013-11-15 5 views
1

이 질문은 this one에 가깝게 약간 비틀었다.웹 API 라우팅 : "api/{컨트롤러}/최신"뿐만 아니라 "API/컨트롤러}/{ID}"를 전달하는 방법

클라이언트가 최신 항목을 가져올 수 있도록 api/items/5api/items/newest과 같은 요청을 할 수 있도록 웹 API 라우팅 테이블을 설정하고 싶습니다.

나는 some articles을 통해 페이징했는데 올바른 방향인지 여부를 결정하는 데별로 행운이 없었습니다.

내 첫 번째 질문은 발신자가 최신 item을 찾을 수있게하는 "올바른"또는 "깨끗한"방법은 무엇입니까? api/items/newest과 같은 일을해도 괜찮습니까?

현재이 내 WebApiConfig.cs 파일에 작동하는 것 같다 :

config.Routes.MapHttpRoute(
    name: "NewestItems", 
    routeTemplate: "api/items/newest", 
    defaults: new { controller = "Items" } 
); 

config.Routes.MapHttpRoute(
    name: "ItemsById", 
    routeTemplate: "api/items/{id}", 
    defaults: new { controller = "Items" } 
); 

config.Routes.MapHttpRoute(
    name: "DefaultApi", 
    routeTemplate: "api/{controller}/{id}", 
    defaults: new { id = RouteParameter.Optional } 
); 

이러한 접근 방식은 작동하지만 컨트롤러 특정 라우팅 규칙을하지 않고이 작업을 수행하는 더 일반적인 방법이 있는지 궁금 해요 . 나는 다음과 같은 접근 방식을 시도했다, 그러나 규칙이 모호하기 때문에 그것은 작동하지 않았다

config.Routes.MapHttpRoute(
    name: "ActionWithNoArgument", 
    routeTemplate: "api/{controller}/{action}", 
); 

config.Routes.MapHttpRoute(
    name: "DefaultApi", 
    routeTemplate: "api/{controller}/{id}", 
    defaults: new { id = RouteParameter.Optional } 
); 

는 라우팅 규칙 별을 컨트롤러에 의존하지 않고이 작업을 수행하는 더 효과적인 방법이 있나요?

고마워요!

답변

5
config.Routes.MapHttpRoute(
    name: "NewestItems", 
    routeTemplate: "api/{controller}/newest", 
    defaults: new { controller = "Items" } 
); 

config.Routes.MapHttpRoute(
    name: "ItemsById", 
    routeTemplate: "api/items/{id}", 
    defaults: new { controller = "Items" } 
); 

노선 상부를 가공하고, {controller} 퍼팅 경로가 위쪽을 처리하는 것을 설명하는 어떤 제어기 ​​

+0

+1 것이 일반하게된다. –