简体   繁体   中英

ASP.NET MVC4 Routing - Multiple routes to the same location

I am in the process of setting up a Single Page Application (SPA) and would like to setup, currently two routes. For instance:

  • Route 1: http://localhost - this is the default route which requires authentication (Admin area)
  • Route 2: http://localhost/<client>/<clients project name>/ - this does not require authentication (view only)

In the admin area, they setup the <client> and <clients project name> , therefore I know I need to setup this configuration in MVC4 Routes, but it is unclear to me how I would approach this.

Another caveat would be, if the <clients project name> was not entered into the URL, it would present a search page for that client.

One of the great things about routing in MVC is the ability to route anything to anywhere, regardless of whether the url matches the naming of controllers and action methods. The RouteConfig allows us to register specific routes to cater for this. Let me show you how you can achieve this.

Route 1:

This is handled by the default route in the route config.

routes.MapRoute(
    name: "Default", 
    url: "{controller}/{action}/{id}", 
    defaults: new { controller = "Home", 
                    action = "Index", 
                    id = UrlParameter.Optional });

Hitting http://localhost will take you to the Home controller and the Index action method.

Route 2:

We can set up one route that will cater for http://localhost/<client> and http://localhost/<client>/<clients project name>

routes.MapRoute(
    "Client", 
    "{client}/{title}", 
    new { controller = "Home", 
          action = "Client", 
          title = UrlParameter.Optional });

Hitting either http://localhost/bacon or http://localhost/bacon/smokey will take you to the Home controller and the Client action method. Notice the title is an optional parameter this is how we can get both urls to work with the same route.

For this to work on the controller end our action method Client would need to look like this.

public ActionResult Client(string client, string title = null)
{
    if(title != null)
    {
       // Do something here.
    }
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM