2012-10-09 8 views
5

私は不安な質問があるかもしれませんが、私は1つのURLに複数のコントローラをルーティングするのに少し苦労しています。だから私の質問は、このようなURLを処理する方法である。最終的にdeviceparametersは、すべてのコントローラと数字です複数のコントローラがルーティングされています

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

はIDです。私はそれぞれのコントローラを持っていますが、どのようにそれらを処理し、適切なコントローラにルーティングするのですか?

見る方向は?

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

私はあなたがこれに基づいてあなたを実装する方法を考え出すことができると思います。

関連する問題