问题
当一个项目中有前台页面和后台页面,即用户页面和管理员页面,.net mvc3 如何控制路由为:Admin/{controller}/{action}/{id}访问的是管理员(Admin)的域,而通过路由:{controller}/{action}/{id}则访问的是用户页面?
解决方案
.net mvc3为我们提供了域(areas)的概念,可以在项目中添加一个管理员域,可以与用户域进行区分。
解决过程
1)首先在已有的mvc项目中添加一个Admin域,右键项目-->添加-->区域,输入区域名(Admin),就会自动生成一个Areas文件夹,里面包含了新建的域(Admin);
2)为管理员域和用户域设置不同的路由,使得当访问Admin/{controller}/{action}/{id}时,访问的是管理员域,而非用户域。
在新建Admin域时,会自动生成一个AdminAreaRegistration.cs文件,这个文件即是为不同的域设置路由,修改如下:
View Code
1 public class AdminAreaRegistration : AreaRegistration 2 { 3 public override string AreaName 4 { 5 get 6 { 7 return "Admin"; 8 } 9 } 10 11 public override void RegisterArea(AreaRegistrationContext context) 12 { 13 context.MapRoute( 14 "Admin_default", 15 "Admin/{controller}/{action}/{id}",//Admin路由 16 new { action = "Index", id = UrlParameter.Optional },//默认参数 17 new string[]{"OpenCart.Admin.Controllers"}//**设置该路由所对应的Controller 18 ); 19 } 20 }
并且修改用户域加载时注册的路由,修改如下:
View Code
1 public static void RegisterRoutes(RouteCollection routes) 2 { 3 routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 4 5 routes.MapRoute( 6 "Default", // 路由名称 7 "{controller}/{action}/{id}", // 带有参数的 URL 8 new { controller = "Home", action = "Index", id = UrlParameter.Optional }, // 参数默认值 9 new string[]{"OpenCart.Controllers"}//设置域,与Admin区分 10 ); 11 12 }
结果
经过以上设置修改之后,用户域和管理员域就可以区分开来,访问Admin/{controller}/{action}/{id}即访问管理员域,访问{controller}/{action}/{id}即访问用户域。问题得以解决。