12

Ho due percorsi API per la mia API atm, ma voglio aggiungerne altri, e il modo in cui lo sto facendo sembra sovrascrivere l'un l'altro, quindi nel codice che ho incollato, solo il percorso CreateUser funziona.Come rendere più MapHttpRoutes per 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 
     }); 
} 

risposta

17

credo che il modello api/{controller}/{cUser} nel percorso "CreateUser" è la corrispondenza con il riposo delle azioni di controllo a causa del suo modello più generico. Utilizzare il nome del controller specifico nelle rotte come "Utente" (api/Utente/{amministratore}) e "Gioco" (api/Gioco/{giocatoreID}). I percorsi più specifici dovrebbero essere nella parte superiore e più generici nella parte inferiore.

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