2012-10-09 2 views
5

불충분 한 질문이있을 수 있지만 하나의 URL에 여러 컨트롤러를 라우팅하는 데 어려움을 겪고 있습니다. 그래서 제 질문은이 같은 URL로 작업하는 방법입니다 :라우팅에 여러 컨트롤러가 있음

결국 deviceparameters 모든 컨트롤러와 숫자가
GET http://foo.com/API/Devices/2/Parameters/2 

는 IDS 있습니다. 나는 그들 각각을위한 컨트롤러를 가지고 있지만 그것을 어떻게 처리하고 적절한 컨트롤러로 라우트합니까?

어떤 방향으로보고 싶습니까?

UPDATE :
그냥 설명 내가 사용 결국 아래의 답을 다음과 솔루션에 대한.

라우팅 니펫을 :

[HttpGet] 
public DeviceCommand GetById(int id, int deviceId) 
    { ... } 

마지막으로 URL :

config.Routes.MapHttpRoute(
      name: "DeviceCommandsControllerHttpRoute", 
      routeTemplate: "api/devices/{deviceId}/commands/{id}", 
      defaults: new { controller = "devicecommands", id = RouteParameter.Optional } 
     ); 

컨트롤러 니펫을

GET http://localhost:49479/api/Devices/2/Commands/1 

답변

8

내가 지금 smilar 필요로 일하고 난 다음이 경로 구조 :

public static void RegisterRoutes(HttpRouteCollection routes) { 

    routes.MapHttpRoute(
     "UserRolesHttpRoute", 
     "api/users/{key}/roles", 
     new { controller = "UserRoles" }); 

    routes.MapHttpRoute(
     "AffiliateShipmentsHttpRoute", 
     "api/affiliates/{key}/shipments", 
     new { controller = "AffiliateShipments" }); 

    routes.MapHttpRoute(
     "ShipmentStatesHttpRoute", 
     "api/shipments/{key}/shipmentstates", 
     new { controller = "ShipmentStates" }); 

    routes.MapHttpRoute(
     "AffiliateShipmentShipmentStatesHttpRoute", 
     "api/affiliates/{key}/shipments/{shipmentKey}/shipmentstates", 
     new { controller = "AffiliateShipmentShipmentStates" }); 

    routes.MapHttpRoute(
     "DefaultHttpRoute", 
     "api/{controller}/{key}", 
     new { key = RouteParameter.Optional }); 
} 

나는 이것을 바탕으로 어떻게 구현할 수 있는지 생각해 낼 수 있다고 생각합니다.

관련 문제