12

私のAPI atmには2つのAPIルートがありますが、これ以上追加したいと思います。私はそれを実行しているので、お互いを上書きするようです。 CreateUserルートのみが動作します。MVC 4用のMapHttpRoutesを作成する方法Api

public static void RegisterRoutes(RouteCollection routes) 
{ 
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 
    routes.MapHttpRoute(
     name: "CreateUser", 
     routeTemplate: "api/{controller}/{cUser}", 
     defaults: new 
     { 
      controller = "User", 
      action = "CreateUser", 
      cUser = RouteParameter.Optional 
     }); 
    routes.MapHttpRoute(
     name: "AllGames", 
     routeTemplate: "api/{controller}/{playerId}", 
     defaults: new 
     { 
      controller = "Game", 
      action = "GetAllGames", 
      playerId = RouteParameter.Optional 
     }); 
    routes.MapRoute(
     name: "Default", 
     url: "{controller}/{action}/{id}", 
     defaults: new 
     { 
      controller = "Home", 
      action = "Index", 
      id = UrlParameter.Optional 
     }); 
} 

答えて

17

は、私が「でCreateUser」ルート内のパターンapi/{controller}/{cUser}は、そのより一般的なパターンのコントローラーアクションの残りの部分と一致していると信じています。 「ユーザー」(api/User/{cUser})と「ゲーム」(api/Game/{playerId})としてルート内の特定のコントローラ名を使用します。より具体的なルートは上部に、より一般的なルートは下部にあるべきです。

routes.MapHttpRoute(
    name: "CreateUser", 
    routeTemplate: "api/User/{cUser}", 
    defaults: new 
    { 
     controller = "User", 
     action = "CreateUser", 
     cUser = RouteParameter.Optional 
    } 
); 

routes.MapHttpRoute(
    name: "AllGames", 
    routeTemplate: "api/Game/{playerId}", 
    defaults: new 
    { 
     controller = "Game", 
     action = "GetAllGames", 
     playerId = RouteParameter.Optional 
    } 
); 
関連する問題