ASP.Net MVC:与路由
问题描述:
重写我想下面的URI映射:ASP.Net MVC:与路由
/admin/controller/action/id
以下几点:
Controller -> Controller
Action -> Admin_Action
例如:
/admin/Users/Create
Controller -> Users
Action -> Admin_Create
/admin/Users/Delete/1
Controller -> Users
Action -> Admin_Delete(1)
我能做到使用路由规则?
答
我认为以下路由映射应该工作...
routes.MapRoute("YourRouteName", "admin/controller/action/{id}", new { controller = "Controller", action = "Admin_Action", id = UrlParameter.Optional });
答
使用此:
routes.MapRoute("Admin", // Route name
"admin/{controller}/{action}/{id}", // URL with parameters
new { controller = "Controller", action = "Admin_Action", id = UrlParameter.Optional } // Parameter defaults
);
但是,如果你愿意,你也可以做 www.example.com/admin/
routes.MapRoute(
"Default",
"admin/{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
更新
routes.MapRoute(
"AdminArea",
"admin/{controller}/{action}/{id}",
new { controller = "Users", action = "Index", id = UrlParameter.Optional }
);
+0
对不起,我刚刚意识到我的问题并不清楚。我已经正确编辑它。 –
+0
只需将控制器名称更改为用户即可更新。 –
答
如我在this answer中所述,您可以将名称预先命名为使用RouteHandler
的操作。
如果您创建一个名为RouteHandler到AdminHandler
前面加上“Admin_`到你的行动,那么你可以定义你的路线如下:
routes.MapRoute("Admin", // Route name
new Route("admin/{controller}/{action}/{id}",
new RouteValueDictionary(
new { controller = "Home", action = "Index", id = UrlParameter.Optional }),
new AdminHandler()
)
);
不过,我同意布罗迪,你应该把所有管理行为一个单独的区域,因为它是一个更好的设计,并使安全和维护更容易。
对不起,我不认为我的问题是明确的。我的意思是行动应该与管理员之前,当管理员在URI 。(现在在我的问题中) –
在这种情况下,我会建议创建另一个控制器“AdminController”,即在路由映射中存在“admin/..”时使用。另外看看使用“区域”功能...你应该避免创建脂肪控制器,主要从可维护性的角度来看 – brodie
真棒,感谢评论。我将检查区域功能。我确实认为这实际上是我想要做的答案:) –