MVC区域路由配置问题

时间:2015-04-20 09:58:31

标签: c# model-view-controller asp.net-mvc-routing asp.net-mvc-areas

我有一个使用以下结构设置的解决方案

-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 }
        );
    }

任何帮助都会非常感激,因为我有点卡住了。非常感谢

1 个答案:

答案 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 

希望这会有所帮助