Ich denke, was Sie suchen etwas werden könnte, ist die, dass der Autor des Codes unten, um ein Root-Controller genannt hat. Ich habe dies selbst auf ein paar Websites verwendet, und es macht wirklich nette URLs, während Sie nicht mehr Controller erstellen müssen, die Sie gerne hätten, oder mit doppelten URLs enden.
Diese Route ist in 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
);
Mit dieser an anderer Stelle definiert:
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
}
Die RootActionContraint alows Sie noch andere Wege haben, und verhindert, dass die RootController Aktionen im Controller versteckt .
Sie müssen auch einen Controller namens Root erstellen. Dies ist keine vollständige Implementierung. Read the original article here
möchten Sie zwei Arten von URL www.example.com/about und www.example.com/products/index dann sollten oben Routen wie erforderlich funktionieren. Kannst du erwähnen, was Ärger im Detail ist? – swapneel