【发布时间】:2016-12-26 22:53:21
【问题描述】:
所以我有一个网站,基本上每个租户都有一个“区域”。所以它会显示为 www.site.com/ 并且会使用一个区域进入该组页面。
事情是我也有一个区域外的默认路线,所以你可以去 www.site.com/ 这将带你到实际的 ~/Views/Home/Index 页面。但是,如果您尝试键入 www.site.com/Home/Index 或说出创建新组 www.site.com/Group/Create 的页面,它认为它需要转到不存在的区域并给出找不到 404 资源。
这是 RouteConfig.cs 中的默认路由
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional },
new[] { "TicketSystem.Controllers" }
);
这是该地区的路线配置:
context.MapRoute(
"Group_default",
"{group}/{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional },
new[] { "TicketSystem.Areas.Group.Controllers" });
所以 {group} 是您当前正在访问的任何组,然后它会转到该组的常规控制器/操作。但是对于默认路由,无论如何它似乎仍然会转到区域路由。
我在想可能会有一个后备。因此,当它试图去该区域并且找不到正确的控制器/动作时,它将检查下一个默认路由。如果它仍然找不到任何东西,它将给出 404 错误资源找不到。虽然我不确定该怎么做。
所以要使 www.site.com/ 工作并允许 www.site.com/Home/Index 工作。
【问题讨论】:
-
group的值是多少?它只能是您在应用程序中拥有的区域或任何随机字符串中的一个吗? -
@Shyju 该区域的组值可以是任何字符串,只要它没有空格。加载该区域时,它会检查以确保该组存在于数据库中。所以它可能是 www.site.com/testgroup 或 www.site.com/othergroup 并且它们都应该进入实际组页面。
-
所以你基本上只有一个区域。仪式?当组在 url 中时,您希望由区域处理吗?
-
是的,单个区域将包含该组的所有访问/页面。任何不需要组的页面都将位于常规控制器/视图中。因此 www.site.com/group1 将转到该区域,但 www.site.com/home/index 将转到常规 Home 控制器和 Index 操作。目前它认为 www.site.com/home/index 中的主页是基于我的 OP 中的路由的组。
-
我发布了一个应该可以正常工作的答案。
标签: c# asp.net-mvc asp.net-mvc-routing asp.net-mvc-areas