Asp.net mvc 将URL映射到具有相同名称的控制器

Asp.net mvc 将URL映射到具有相同名称的控制器,asp.net-mvc,asp.net-mvc-routing,directory-structure,Asp.net Mvc,Asp.net Mvc Routing,Directory Structure,我有以下选择: routes.MapRoute("Home", "{language}-{culture}/{controller}/{action}"); 然后我有两个这样的控制器: Controllers --->en-EN -------->HomeController --->pt-PT -------->HomeController routes.MapRoute( "HomeEn", // Route name "en-EN/{cont

我有以下选择:

routes.MapRoute("Home", "{language}-{culture}/{controller}/{action}");
然后我有两个这样的控制器:

Controllers
--->en-EN
-------->HomeController
--->pt-PT
-------->HomeController
routes.MapRoute(
     "HomeEn", // Route name
     "en-EN/{controller}/{action}", // URL with parameters
     new { controller = "Home", action = "Index" }, // Parameter defaults
     new string[] { "MvcApplication2.Controllers.en_EN"}
);

routes.MapRoute(
     "HomePt", // Route name
     "pt-PT/{controller}/{action}", // URL with parameters
     new { controller = "Home", action = "Index" }, // Parameter defaults
     new string[] { "MvcApplication2.Controllers.pt_PT"}
);
不幸的是,这不起作用,我收到了以下错误:

“找到了多个与名为“Home”的控制器匹配的类型。如果为该请求提供服务的路由({language}-{culture}/{controller}/{action}),则可能会发生这种情况。”未指定名称空间以搜索与请求匹配的控制器。如果是这种情况,请通过调用采用“namespaces”参数的“MapRoute”方法的重载来注册此路由

“主页”请求已找到以下匹配控制器:

MvcApplication2.Controllers.en_EN.HomeController
MvcApplication2.Controllers.pt_PT.HomeController"
我试图添加名称空间“mvcapapplication2.Controllers”作为参数,但它仍然存在,但我不知道它是如何工作的,但这就是我在internet上找到的解决方案

我刚刚开始学习ASP.NETMVC,所以如果我错过了一些非常基本的东西,请不要感到抱歉


非常感谢。

你会有很多不同的文化吗?你可能会考虑使用它们。它们是为这种事情而设计的

如果您只有2条路线,您可以这样硬编码您的路线:

Controllers
--->en-EN
-------->HomeController
--->pt-PT
-------->HomeController
routes.MapRoute(
     "HomeEn", // Route name
     "en-EN/{controller}/{action}", // URL with parameters
     new { controller = "Home", action = "Index" }, // Parameter defaults
     new string[] { "MvcApplication2.Controllers.en_EN"}
);

routes.MapRoute(
     "HomePt", // Route name
     "pt-PT/{controller}/{action}", // URL with parameters
     new { controller = "Home", action = "Index" }, // Parameter defaults
     new string[] { "MvcApplication2.Controllers.pt_PT"}
);

这似乎是一个常见的误解。MVC路由与您的文件系统没有任何关联。您可以将控制器尽可能深地埋在嵌套文件夹中,它仍然是MVC的
HomeController

谢谢您的回复标记。它可以工作,但为什么不能作为一个通用形式:
Routes.MapRoute(“Home“,“{language}-{culture}/{controller}/{action}”,new{controller=“Home”,action=“Index”},new[]{“mvcapapplication2.Controllers.{language}{culture}”)
work?是的,我将有两个以上的区域性,但我不想使用区域,至少目前不想。因为语言和区域性的路由值不是以可以传递到字符串[]的方式存储的通过代码..你可能可以做一些路由约束,但这将是非常困难的。如果你为不同的剪切创建新的站点区域,为什么你反对区域?它们不会增加那么多开销,并且会帮助你保持不同的区域分开..嗨,马克,我没有反对区域的任何东西,我实际上不知道我在2004/2006年用Java与MVC合作,所以我尝试将我已经了解的MVC应用到ASP.MVC.Ah中-不是为了打败一匹死马-但你所做的是真正的领域。早期创建它们比后期创建要容易得多,而且必须移动所有代码。这很简单,只需添加区域,然后管理员!:)是的,你说得对,我刚才读到一些关于这方面的文章,但似乎没有读到。谢谢