Removing Controller from url in a specific scenari

2020-05-04 21:04发布

问题:

I want to remove Controller named Home from url when user clicks on About and Contact pages in ASP.NET MVC sample application. I tried this but it is giving me a 404 error.

routes.MapRoute("Home", "{action}/{id}",
    new { controller = "Home" });

When i remove this all works perfectly.
Note I want to remove Controller name only when Controller is Home. Other Controller should remain same. Further I kept the code in Route.Config file above

 routes.MapRoute("Home", "{action}/{id}",
     new { controller = "Home" });

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

Required Result

abc.com/Home/About should shown as abc.com/About
abc.com/Home/Contact should shown as abc.com/Contact

回答1:

You should map new route in the global.asax (add it before the default one), for example:

routes.MapRoute("SpecificRouteforHomeController", "{action}/{id}", new {controller = "Home", action = "Index", id = UrlParameter.Optional});

// default route  any defalt you want
routes.MapRoute("Default", "{controller}/{action}/{id}", new {controller = "Account", action = "Login", id = UrlParameter.Optional} );


回答2:

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

If u will specify the controller name then this will work with that controller name. Bu if not the by default it will take controller name as DefaultControllerName.