How to make more MapHttpRoutes for MVC 4 Api

16,306

I believe the pattern api/{controller}/{cUser} in "CreateUser" route is matching with rest of the controller actions because of its more generic pattern. Use specific controller name in the routes as "User" (api/User/{cUser}) and "Game" (api/Game/{playerId}). The more specific routes should be at the top and more generic at the bottom.

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
    }
);
Share:
16,306

Related videos on Youtube

Mech0z
Author by

Mech0z

Software Engineer Jan 2013

Updated on September 15, 2022

Comments

  • Mech0z
    Mech0z over 1 year

    I have 2 API routes for my API atm, but I want to add more, and the way I am doing it it seems to overwrite each other, so in the code I pasted, only the CreateUser route works.

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