我目前有两个在线托管的不相关的 MVC3 项目。
一个工作正常,另一个不工作,给我错误:
找到了与名为“Home”的控制器匹配的多种类型。如果为该请求提供服务的路由 (‘{controller}/{action}/{id}’) 未指定命名空间来搜索与请求匹配的控制器,则可能会发生这种情况。 如果是这种情况,请通过调用采用“namespaces”参数的“MapRoute”方法的重载来注册此路由。
找到了与名为“Home”的控制器匹配的多种类型。如果为该请求提供服务的路由 (‘{controller}/{action}/{id}’) 未指定命名空间来搜索与请求匹配的控制器,则可能会发生这种情况。
如果是这种情况,请通过调用采用“namespaces”参数的“MapRoute”方法的重载来注册此路由。
我的托管人的工作方式是他给了我 FTP 访问权限,并且在那个文件夹中我还有另外两个文件夹,一个用于我的每个应用程序。
ftpFolderA2/foo.com ftpFolderA2/bar.com
ftpFolderA2/foo.com
ftpFolderA2/bar.com
foo.com 工作正常,我将我的应用程序发布到我的本地文件系统,然后 FTP 内容并且它可以工作。
当我上传并尝试运行 bar.com 时,会触发上述问题并阻止我使用我的网站。 虽然 foo.com 仍然有效 。
bar.com 是否在 ftpFolderA2 内部的任何地方搜索控制器,这就是它寻找另一个控制器的原因HomeController?我怎么能告诉它只在 Controller 文件夹中查看它应该?
HomeController
事实:
有人可以确认这是问题吗?
当您使用区域并且您在区域和根中具有 相同的控制器 名称时,通常会发生此错误消息。例如,您有两个:
~/Controllers/HomeController.cs
~/Areas/Admin/Controllers/HomeController.cs
为了解决此问题(如错误消息所示),您可以在声明路由时使用命名空间。所以在主路由定义中Global.asax:
Global.asax
routes.MapRoute( "Default", "{controller}/{action}/{id}", new { controller = "Home", action = "Index", id = UrlParameter.Optional }, new[] { "AppName.Controllers" } );
在你的~/Areas/Admin/AdminAreaRegistration.cs:
~/Areas/Admin/AdminAreaRegistration.cs
context.MapRoute( "Admin_default", "Admin/{controller}/{action}/{id}", new { action = "Index", id = UrlParameter.Optional }, new[] { "AppName.Areas.Admin.Controllers" } );
如果您不使用区域,那么您的两个应用程序似乎都托管在同一个 ASP.NET 应用程序中,并且会发生冲突,因为您在不同的命名空间中定义了相同的控制器。如果您想避免此类冲突,则必须配置 IIS 以将这两个托管为单独的 ASP.NET 应用程序。如果您无权访问服务器,请咨询您的托管服务提供商。