在做C#MVC项目时,有时候会根据不同的模块进行控制器编写,比如后台管理,接口调用,会用到相同的文章数据,这时候会使用同一个ArticleController的控制器名称。
这时候建议使用MVC的分区功能来做项目部署。
一开始要创建分区时,发下并没有添加分区的默认入口,这是因为区域选项被折叠到了“新搭建基架的项目”中。
解决:项目上右键“添加”-“新搭建基架的项目” =》目录结构下:通用-MVC-区域,就可以了。
根据提示新建一个Api的接口分区
这样就可以在分区里面写上接口相关的控制器了
但是,由于接口分区项目跟主项目存在相同的控制器名称,导致访问的时候会报控制器相同的报错。
这时候就要用到分区注册器的路由设置以及主项目App_start/RouteConfig.cs分别进行路由设置。
在配置的时候使用命名空间namespaces属性,分别写上同名控制器的命名空间。
如主项目的路由配置:
routes.MapRoute(
"course", // 课程相关
"course/{controller}/{action}/{id}", //路由规则,匹配以Admin开头的url
new { controller = "Home", action = "Index", id = UrlParameter.Optional },
namespaces: new string[] { "TKDCenter.Controllers" }
);
分区项目的路由配置:
context.MapRoute(
"Api_default",
"Api/{controller}/{action}/{id}",
new { action = "Index", id = UrlParameter.Optional },
namespaces:new string[]{ "TKDCenter.Areas.Api.Controllers" }
);
这样就可以实现同名控制器的不同路径访问了
http://XXX/api/course/index
http://XXX/course/index