如何在ASP.NET MVC中为我的管理部分设置路由?
-
05-07-2019 - |
题
通常我的网址看起来像标准: www.example.com/controller/action
现在我想设置我的管理部分,如:
www.example.com/admin/ www.example.com/admin/user/list www.example.com/admin/content/add etc.
所以格式为: www.example.com/admin/controller/action
我似乎无法弄清楚如何设置路线,所以它看起来像上面那样。
解决方案
您只需要在路径定义的开头用硬编码的“admin”部分映射新路径。
例如,将其添加到 Global.asax.cs
文件中的 RegisterRoutes
中的路由,并确保它显示在默认路由上方(假设您尚未添加)其他路线):
routes.MapRoute(
"Default",
"admin/{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = "" }
);
注意:'admin'部分在路由定义的开头硬编码。
注意2:如果您添加了超出默认值的其他路线,则需要确保您的路线正确订购。
以下是 Scott Guthrie 关于MVC路由的优秀博文的链接: URL路由
其他提示
Kelsey的回答是正确的,但我想在讨论中加入一些内容。另一种选择是实际上不具有“管理”权限。路由,但需要管理员身份验证会话才能实际访问受限制的网址。
这通常是“传统”的做法。 RESTful应用程序。您的控制器表示您正在操作的资源类型,操作是动词,而id是该资源的特定成员的唯一标识符。
换句话说,而不是:
/content/list (for normal users)
/admin/content/add (for admins)
你会有
/content/list (for everyone)
/content/add (for admin, but must be authenticated to work)
添加/ admin /到URL并没有真正添加任何好处(除非您可以使用针对/ admin下的任何内容的单一规则编写您的安全逻辑),但权衡更复杂的路由和破坏标准RESTful 。打破标准做法本身并不是一件坏事,但你应该认为它们是标准的,除非你有打破它们的特定好处,你可能会考虑坚持它们。
应该注意的是,在两种网址样式中,您都需要对用户进行身份验证,否则任何人都可以使用它。
在ASP.NET MVC中,您可以使用ActionFilters根据用户级别限制对操作(甚至整个控制器)的访问。通过使用这些过滤器修改管理员操作,您可以确保只有经过身份验证的管理员用户才能实际使用这些过滤器。
阅读 Scott Gu的博客文章或 Rob Connery's发布以获取更多信息。
从MVC版本2开始,他们添加了“区域”概念,允许您正确地执行此操作:)这是 ScottGu关于MVC 2预览的帖子。