Asp.net MVC 5管理路由
本文关键字:管理 路由 MVC net Asp | 更新日期: 2023-09-27 18:17:13
我在控制器目录中有HomeController.cs和AccountController.cs。我在控制器目录中添加了名为"Admin"的新文件夹,并在其中添加了DashboardController.cs
我想/admin/dashboard路由到DashboardController不幸的是/admin/Home和/admin/Account也将路由到各自的控制器。我希望/admin/Home和/admin/Account都是404。我该怎么做呢?
这是我的RouteConfig.cs
routes.MapRoute(
name: "Admin",
url: "admin/{controller}/{action}/{id}",
defaults: new { controller = "Dashboard", action = "Index", id = UrlParameter.Optional }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
在Admin路由中,您需要将{controller}
替换为dashboard
,如下所示,这样它就不会将URL中/admin/
部分之后的下一个内容视为控制器。
routes.MapRoute(
name: "Admin",
url: "admin/dashboard/{action}/{id}",
defaults: new { controller = "Dashboard", action = "Index", id = UrlParameter.Optional }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
MVC路由不是基于文件夹结构进行映射的。在你的url ("admin/{controller}/{action}/{id}")中,第一个/前面的子字符串代表你的控制器的名称。在这种情况下,您指定请求将调用"AdminController"而不是"DashboardController"。@Wellspring给出的解决方案在这里是正确的
正如@Hackerman在评论中建议的那样。正确的方法是引入Admin区域。这将自动为yoursite.com/admin页面创建路由。
要添加Admin区域,右键单击您的web项目,选择add> area。
然后你想把你的Dashboard控制器和视图放在该区域的相应文件夹中。
除了添加这个区域,你还想让你在RouteConfig.cs中的默认路由不会拉出Admin区域上的控制器。要做到这一点,你需要在route .config.cs中编辑默认路由。您希望在对MapPath的调用上添加一个名称空间属性,并将UseNamespaceFallback数据令牌设置为false:
Route defaultRoute = routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
namespaces: new[] { typeof(HomeController).Namespace }
);
// this makes it so the route only looks for controllers under
// the namespace specified through the namespaces parameter
defaultRoute.DataTokens["UseNamespaceFallback"] = false;