Убираем "Home" из названий ссылок в ASP.NET MVC
По умолчанию ASP.NET MVC генерирует дефолтный Home контроллер, для отображения базовых страниц, например, Index. Доступ к этой странице осуществляется без явного указания имени контроллера, например, http://msug.vn.ua/.
Но другие страницы – About, ContactUs и т.д. требуют указания в url названия контроллера (Home) и выглядит это таким образом:
http://msug.vn.ua/Home/About
Эммм, не по фэншую... Гораздо лучше иметь:
http://msug.vn.ua/About
Собственно, дальше о том, как это сделать.
Добавляем новый роут:
routes.MapRoute("Root", "{action}", new { controller = "Home", action = "Index", id = UrlParameter.Optional }, new { isMethodInHomeController = new RootRouteConstraint<HomeController>() });
Добавляем новый класс RootRouteConstraint
:
public class RootRouteConstraint<T> : IRouteConstraint { public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection) { var rootMethodNames = typeof(T).GetMethods().Select(x => x.Name.ToLower()); return rootMethodNames.Contains(values["action"].ToString().ToLower()); } }
Этот класс проверяет, содержит ли HomeController необходимые нам action и если да – переопределяет стандартный роут.
Для объявления ссылки на About нужно использовать привычный код:
@Html.ActionLink("About", "About", "Home")
После этого вы можете наслаждаться короткими именами (что, собственно, и было сделано для msug.vn.ua).