2012-10-09 140 views
5

我可能有一個蹩腳的問題,但我在多個控制器路由在一個URL中掙扎了一下。所以我的問題是如何與這樣一個URL工作:路由中的多個控制器

GET http://foo.com/API/Devices/2/Parameters/2 

其中最終deviceparameters是所有控制器和數字標識。我有他們每個人的控制器,但如何處理他們,將他們路由到適當的控制器?

任何方向看?

UPDATE:
只是爲了澄清,我結束了使用,並遵循下面的答案的解決方案。

路由片段:

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

控制器片段:

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

最後的網址:

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 }); 
} 

我想你可以弄清楚如何基於這個來實現你的。