我目前有两个不相关的MVC3项目在线托管。
一个工作正常,另一个不工作,给我错误:
找到了多个与名为“ Home”的控制器匹配的类型。如果为该请求提供服务的路由(’{controller} / {action} / {id}’)未指定名称空间来搜索与该请求匹配的控制器,则可能会发生这种情况。 如果是这种情况,请通过调用带有“名称空间”参数的“ MapRoute”方法的重载来注册此路由。
找到了多个与名为“ Home”的控制器匹配的类型。如果为该请求提供服务的路由(’{controller} / {action} / {id}’)未指定名称空间来搜索与该请求匹配的控制器,则可能会发生这种情况。
如果是这种情况,请通过调用带有“名称空间”参数的“ 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应用程序托管。如果您无权访问服务器,请询问您的主机提供商。