12

API atm'ım için 2 API yolum var, ancak daha fazla eklemek istiyorum ve bunu yaptığım gibi birbirinin üzerine yazıyormuş gibi görünüyorum, yani yapıştırdığım kodda, Sadece CreateUser rotası çalışır.MVC 4 için nasıl daha fazla MapHttpRoute 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 
     }); 
} 

cevap

17

ben "CreateUser" rotada desen api/{controller}/{cUser} nedeniyle daha genel desen kontrolör eylemleri geri kalanı ile eşleşen inanıyoruz. Rotalarda "Kullanıcı" (api/Kullanıcı/{cKullanıcı}) ve "Oyun" (api/Oyun/{playerId}) olarak belirli kontrolör adını kullanın. Daha spesifik rotalar, en üstte ve altta daha genel olmalıdır.

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 
    } 
); 
İlgili konular