Маршруты ASP.Net MVC: как убрать home из маршрутов


По умолчанию, в ASP.NET MVC используются одинаковые маршруты для всех контроллеров. Однако, согласитесь, что странно выглядят маршруты вида your.site.url/home/about? Далее я приведу способ решения этой проблемы. В результате, ваши ссылки на действия контроллера Home будут иметь вид: your.site.url/about.

В созданном Visual Studio проекте Asp.Net MVC 4 имеется каталог App_Start, в котором описаны классы настройки конфигурации приложения. В частности, маршруты добавляются в классе RouteConfig в соответствующем файле:

 public class RouteConfig 
 {
         public static void RegisterRoutes(RouteCollection routes) 
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
            routes.MapRoute( name: "Default",
                             url: "{controller}/{action}/{id}",
                             defaults: new { 
                                 controller = "Home",
                                action = "Index",
                                id = UrlParameter.Optional 
                                            } 
                           ); 
          } 
  }

Для того, чтобы сделать маршруты к контроллеру home только по действиям без указания самого контроллера, необходимо
добавить дополнительный маршрут выше маршрута Default:

routes.MapRoute( name: "OnlyAction", url: "{action}", defaults: new { controller = "Home", action = "Index" } );

Таким образом, у вас должен получиться следующий класс:

public class RouteConfig 
{
    public static void RegisterRoutes(RouteCollection routes) 
    { 
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
        routes.MapRoute( name: "OnlyAction",
                         url: "{action}",
                         defaults: new { controller = "Home", action = "Index" } 
                       );
        routes.MapRoute( name: "Default", 
                         url: "{controller}/{action}/{id}",
                        defaults: new {
                            controller = "Home", 
                            action = "Index", 
                            id = UrlParameter.Optional 
                                      } 
                        );
      }
 }

Наверх