Я думаю, что вы, возможно, ищете то, что автор кода ниже назвал Root Controller. Я сам использовал это на нескольких сайтах, и это действительно дает хорошие URL-адреса, не требуя от вас создания большего количества контроллеров, которые вы хотели бы, или в конечном итоге дублирующих URL-адресов.
Этот маршрут находится в Global.asax:
// Root Controller Based on: ASP.NET MVC root url’s with generic routing Posted by William on Sep 19, 2009
// http://www.wduffy.co.uk/blog/aspnet-mvc-root-urls-with-generic-routing/
routes.MapRoute(
"Root",
"{action}/{id}",
new { controller = "Root", action = "Index", id = UrlParameter.Optional },
new { IsRootAction = new IsRootActionConstraint() } // Route Constraint
);
С этим определено в другом месте:
public class IsRootActionConstraint : IRouteConstraint
{
private Dictionary<string, Type> _controllers;
public IsRootActionConstraint()
{
_controllers = Assembly
.GetCallingAssembly()
.GetTypes()
.Where(type => type.IsSubclassOf(typeof(Controller)))
.ToDictionary(key => key.Name.Replace("Controller", ""));
}
#region IRouteConstraint Members
public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection)
{
string action=values["action"] as string;
// Check for controller names
return !_controllers.Keys.Contains(action);
}
#endregion
}
RootActionContraint позволяет вам использовать другие маршруты и не позволяет действиям RootController скрывать любые контроллеры.
Вам также необходимо создать контроллер с именем Root. Это не полная реализация. Прочитать оригинальную статью здесь