通常我的网址看起来像标准: 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"部分映射新路径.
例如,将其添加到文件中的路线中RegisterRoutes
,Global.asax.cs
并确保它显示在默认路线上方(假设您尚未添加其他路线):
routes.MapRoute( "Default", "admin/{controller}/{action}/{id}", new { controller = "Home", action = "Index", id = "" } );
注意:'admin'部分在路由定义的开头硬编码.
注意2:如果您添加了超出默认值的其他路线,则需要确保您的路线正确订购.
以下是Scott Guthrie关于MVC路由的好博客文章的链接:URL路由
凯尔西的回答是正确的,但我想在讨论中加入一些内容.另一种选择是根本不具有"管理"路由,而是需要管理员认证的会话来实际访问受限制的URL.
这通常是在"传统"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.打破标准做法本身并不是一件坏事,但你应该认为它们是标准的,除非你有打破它们的特定好处,你可以考虑坚持它们.
应该注意的是,在两种URL样式中,您都需要对用户进行身份验证,否则任何人都可以使用它.
在ASP.NET MVC中,您可以使用ActionFilters根据用户级别限制对操作(甚至整个控制器)的访问.通过使用这些过滤器修改管理员操作,您可以确保只有经过身份验证的管理员用户才能实际使用这些过滤器.
阅读Scott Gu的博客文章或Rob Connery的帖子了解更多信息.