我有一个使用以下结构设置的解决方案
-Controllers
---HomeController
---SomeGeneralController
-Areas
---Admin
-----Controllers
-------AController
-------BController
---Settings
-----Controllers
-------CController
-------DController
我想设置路由,因此遵循以下规则:
/anystringdoesntmatter/somegeneral/1
/lksjflkjs/somegeneral/index/1
/admin/somegeneral/index/1
/settings/somegeneral/index/1 // all these paths should route to to root 'somegeneralcontroller'
所以基本上,当任何网址都有一个“一般”的控制器时,即使存在区域匹配,它仍然会路由到根部' somegeneralcontroller'
我知道路由注册顺序很重要,因为第一个正确匹配是提供的匹配。考虑到这一点,我的路由在global.asax.cs
中设置如下AreaRegistration.RegisterAllAreas();
RouteConfig.RegisterRoutes(RouteTable.Routes);
//RouteConfig.cs
routes.MapRoute(
name: "Default",
url: "{path}/{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional, path = UrlParameter.Optional });
//AreaRegistration.cs
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
"Admin_default",
"Admin/{controller}/{action}/{id}",
new { action = "Index", id = UrlParameter.Optional }
);
}
任何帮助都会非常感激,因为我有点卡住了。非常感谢
答案 0 :(得分:0)
您可以添加"主要"在任何路线注册之前的路线,如
RouteTable.Routes.MapRoute(
name: "SomeGeneral",
url: "{path}/SomeGeneral/{action}/{id}",
defaults: new { controller = "SomeGeneral", action = "Index", id = UrlParameter.Optional});
//Then add the rest of the routes
AreaRegistration.RegisterAllAreas();
RouteConfig.RegisterRoutes(RouteTable.Routes);
第一条路线应截取以下网址:
/lksjflkjs/somegeneral/index/1
/admin/somegeneral/index/1
/settings/somegeneral/index/1
希望这会有所帮助