如图,我的项目里有两个名字相同的控制器IndexController,但是目录(命名空间)不一样。
路由匹配代码:
routes.MapRoute(
name: "Controller1",
url:"{controller}/{action}/{id}",
defaults: new { controller = "Index", action = "Default", id = UrlParameter.Optional } ,
namespaces: new string[] { "MvcTest.Controllers" }
);
routes.MapRoute(
name:"Controller2",
url: "NewTest/{controller}/{action}{id}",
defaults: new { controller = "Index", action = "Test", id = UrlParameter.Optional },
namespaces: new string[] { "MvcTest.Controllers.NewTest" }
);
访问Default()或Test()还提示错误:
“index”请求找到下列匹配的控制器:
MvcTest.Controllers.IndexController
MvcTest.Controllers.NewTest.IndexController
请大家帮忙看看怎么回事?谢谢。
一般情况下指定了命名空间应该是可以的,不知道怎么回事,有空研究一下。
我觉得是不行的,MVC系统在找Controller时,不考虑项目中文件夹路径的。
在路由中,是不认Controller所在的文件夹的
Controller外的文件夹只起便于分类、代码便于管理的作用
我上面的写法就是从网上找的,有人说可以。在看看吧
通过在routes.MapRoute()这个扩展方法里面设置namespaces: new string[] { "MvcTest.Controllers" }和namespaces: new string[] { "MvcTest.Controllers.NewTest" }是可以解决的。不过你要注意配置的路由的顺序。
两个路由规则换下位置
顺序换了,还是找不到路径。。。