我有一个ASP MVC 4项目,其中包含一些区域,其结构如下:
在Global.asax中,我先注册区域路由,然后注册全局路由:
AreaRegistration.RegisterAllAreas();
RegisterRoutes(RouteTable.Routes);
我在RegisterRoutes中有一条默认路由:
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional }, // Parameter defaults
new string[] { "Controllers" }
);
现在,我希望项目的默认路由指向MyArea中的一个动作(以返回URL作为参数的登录页面),而不影响其余路由。我试图在MyAreaRegistration中设置默认路由:
context.MapRoute(
"MyArea_Default",
"{controller}/{action}/{returnUrl}",
new { controller = "MyArea", action = "LogOn", returnUrl = "/Home/Index" },
new[] { "Areas.MyArea.Controllers" }
);
这正在工作,项目从所需的视图开始。但是,问题在于,项目中使用的许多路由(例如/ Home / Help)都将匹配MyArea_Default路由,因为它是在Default路由之前注册的。尝试在RegisterRoutes中设置区域DataToken还会弄乱不在该区域中的所有其他路由。
如何在不弄乱其他所有内容的情况下实现该区域的默认路线?
感谢您的帮助。