12

Tengo 2 rutas de API para mi API atm, pero quiero agregar más, y la forma en que lo hago parece sobrescribirse entre sí, por lo que en el código pegué, solo funciona la ruta CreateUser.Cómo hacer más MapHttpRoutes para MVC 4 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 
     }); 
} 

Respuesta

17

creo que el patrón de api/{controller}/{cUser} en ruta "CreateUser" es coincidente con el resto de las acciones del controlador debido a su patrón más genérico. Use un nombre de controlador específico en las rutas como "Usuario" (api/Usuario/{cUser}) y "Juego" (api/Game/{playerId}). Las rutas más específicas deberían estar en la parte superior y más genéricas en la inferior.

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