12

API API에 대한 API 경로가 2 개 있지만 더 많이 추가하고 싶습니다. 다른 방법으로는이를 덮어 쓰는 것처럼 보입니다. 따라서 붙여 넣은 코드에서, 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 
    } 
); 
관련 문제