场景
首先说下遇到的问题,项目中需要用到 【Area名/文件夹名/Controller/方法名】这种四级目录方式的接口调用,一般而言,都是【Area名/Controller/方法名】这种三级目录的方式,而且MVC中默认也是这种方式。
解决方案
MVC中的Area下默认的路由为:
context.MapRoute( "APP_AD_default", "APP_AD/{controller}/{action}/{id}", new { area = this.AreaName, controller = "Home", action = "Index", id = UrlParameter.Optional }, new string[] { "Web.Areas." + this.AreaName + ".Controllers" } );
对于一般同一Area下统一使用一个业务类型名的文件夹的方式,比较好处理,直接修改默认的路由即可。即:
context.MapRoute( "APP_AD_Elev", "APP_AD/Elev/{controller}/{action}/{id}", new { area = this.AreaName, controller = "Home", action = "Index", id = UrlParameter.Optional }, new string[] { "Web.Areas." + this.AreaName + ".Controllers.Elev" } );
而如果是同一Area下区分了多个不同业务类型的文件夹,那么,就需要配置多个路由:
context.MapRoute( "APP_AD_Elev", "APP_AD/Elev/{controller}/{action}/{id}", new { area = this.AreaName, controller = "Home", action = "Index", id = UrlParameter.Optional }, new string[] { "Web.Areas." + this.AreaName + ".Controllers.Elev" } ); context.MapRoute( "APP_AD_Alarm", "APP_AD/Alarm/{controller}/{action}/{id}", new { area = this.AreaName, controller = "Home", action = "Index", id = UrlParameter.Optional }, new string[] { "Web.Areas." + this.AreaName + ".Controllers.Alarm" } ); context.MapRoute( "APP_AD_default", "APP_AD/{controller}/{action}/{id}", new { area = this.AreaName, controller = "Home", action = "Index", id = UrlParameter.Optional }, new string[] { "Web.Areas." + this.AreaName + ".Controllers" } );
注意:配置多个路由一定要注意先后顺序和命名空间,default的路由放在最后,否则其他路由配置将无效。