Шаг 1:
Создайте ограничение маршрута.
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());
}
}
Шаг 2:
Добавьте новое сопоставление маршрута над сопоставлением по умолчанию, которое использует только что созданное нами ограничение маршрута. Универсальным параметром должен быть класс контроллера, который вы планируете использовать в качестве корневого контроллера.
routes.MapRoute(
"Root",
"{action}",
new {controller = "Home", action = "Index", id = UrlParameter.Optional},
new {isMethodInHomeController = new RootRouteConstraint<HomeController>()}
);
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new
{controller = "Home", action = "Index", id = UrlParameter.Optional}
);
Теперь вы должны иметь доступ к вашим домашним контроллерам, например так:
example.com/about,
example.com/contact
Это влияет только на URL HomeController. Все остальные контроллеры будут иметь функции маршрутизации по умолчанию.