使用前缀或不使用前缀的区域路由

时间:2015-12-22 10:58:47

标签: c# asp.net-mvc asp.net-mvc-routing

在我的应用中,我有两个区域:PortalAdmin。我想在XXXAreaRegistration.cs个文件中配置路由。

对于/{controller}/{action}小组的Portal/admin/{controller}/{action},我想要的是Admin

我尝试了以下配置以实现:

// AdminAreaRegistration.cs
context.MapRoute("Admin",
                 "admin/{controller}/{action}",
                 new { action = "Index", controller = "Admin" });

// PortalAreaRegistration.cs
context.MapRoute("Portal",
                 "{controller}/{action}",
                 new { action = "Index", controller = "Portal" });

对于/我得到了我的Portal/Index.cshtml,但对于/admin,我得到了404 ...我想在第二种情况下它会找到AdminController Portal区域,这就是我获得404的原因。但是如何制定解决方法来创建这样的路由?

2 个答案:

答案 0 :(得分:1)

当您将http://www.domain.com/admin/路由搜索调用为http://www.domain.com/admin/admin时代码中的

,因为您的默认控制器是管理员设置默认参数作为现有控件

我想在称为admin

的区域中没有控制权

UPTADE FOR NAME SPACE

修改代码,如下所示

 context.MapRoute("Admin",
             "admin/{controller}/{action}",
             new { action = "Index", controller="Home"},
             new string[] { "MyApp.Admin.Controllers" }  // specify the new namespace);

答案 1 :(得分:1)

要解决您当前为您的Portal区域注册添加约束的路由冲突:

// PortalAreaRegistration.cs
context.MapRoute(
    "Portal",
    "{controller}/{action}",
    new { action = "Index", controller = "Portal" },
    new { controller = "^(?!.*admin).*$" }
);

这将确保将Portal区域映射到除{controller}/{action}之外的所有admin/*,因为您希望管理区域提供此服务。

当然,由于显而易见的原因,您的Portal区域中不能有一个名为AdminController的控制器。