12

Ich habe 2 API-Routen für meine API atm, aber ich möchte mehr hinzufügen, und die Art, wie ich es tue, scheint sich gegenseitig zu überschreiben, so in den Code, den ich eingefügt habe, Nur die Route CreateUser funktioniert.So erstellen Sie mehr MapHttpRoutes für 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 
     }); 
} 

Antwort

17

Ich glaube, das Muster api/{controller}/{cUser} in „AngelegtVon“ Weg mit dem Rest der Controller-Aktionen wird passend wegen seiner allgemeineren Muster. Verwenden Sie einen bestimmten Controller-Namen in den Routen als "Benutzer" (api/Benutzer/{cUser}) und "Spiel" (api/Spiel/{playerId}). Die spezifischeren Routen sollten oben und allgemeiner unten sein.

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