覆盖MVC中的区域路由

Overriding the area route in MVC

我有一个使用文件夹结构如下所示的区域设置的解决方案

Controllers

---HomeController
---SpecialController

Areas

---Admin
-----Controllers
-------AController
-------BController

---Marketing
-----Controllers
-------CController
-------DController

我注册了默认路由如下:

routes.MapRoute(
    "Default",
    "{path}/Special/{action}/{id}",
    new { controller = "Special", action = "Index", id = UrlParameter.Optional, path = UrlParameter.Optional },
    new string[] { "SomeNamespace.WebApplication.Controllers" }
); 

我想配置路由,以便控制器名称为 'Special' 的任何 url 路由到根特殊控制器,而不管 {path} 是否为区域名称。例如

/AnyTextDoesntMatter/Special/Index/1
/Admin/Special/Index/1
/Marketing/Special/Index/1    //these should all route to the root special controller

你能展示一下你剩下的注册路线吗?请务必记住映射的顺序很重要。第一个匹配的路线将被选中。

此外 - 通常在 Global.asax.cs => Application_Start 中区域的路由在主应用程序的路由之前注册。如果您的应用程序属于这种情况,那么您将需要在您的区域特定注册中为这个特殊控制器添加路由映射。

示例Global.Asax.cs

protected void Application_Start()
{
        GlobalConfiguration.Configure(WebApiConfig.Register);
        AreaRegistration.RegisterAllAreas();
        RouteConfig.RegisterRoutes(RouteTable.Routes);
}