小编典典

找到了多种与名为“Home”的控制器匹配的类型

all

我目前有两个在线托管的不相关的 MVC3 项目。

一个工作正常,另一个不工作,给我错误:

找到了与名为“Home”的控制器匹配的多种类型。如果为该请求提供服务的路由 (‘{controller}/{action}/{id}’)
未指定命名空间来搜索与请求匹配的控制器,则可能会发生这种情况。

如果是这种情况,请通过调用采用“namespaces”参数的“MapRoute”方法的重载来注册此路由。

我的托管人的工作方式是他给了我 FTP 访问权限,并且在那个文件夹中我还有另外两个文件夹,一个用于我的每个应用程序。

ftpFolderA2/foo.com

ftpFolderA2/bar.com

foo.com 工作正常,我将我的应用程序发布到我的本地文件系统,然后 FTP 内容并且它可以工作。

当我上传并尝试运行 bar.com 时,会触发上述问题并阻止我使用我的网站。 虽然 foo.com 仍然有效

bar.com 是否在 ftpFolderA2 内部的任何地方搜索控制器,这就是它寻找另一个控制器的原因HomeController?我怎么能告诉它只在
Controller 文件夹中查看它应该?

事实:

  1. 不使用区域。这是两个完全不相关的项目。我将每个已发布的项目放入每个相应的文件夹中。没有什么花哨。
  2. 每个项目只有 1 个 HomeController。

有人可以确认这是问题吗?


阅读 131

收藏
2022-04-07

共1个答案

小编典典

当您使用区域并且您在区域和根中具有 相同的控制器 名称时,通常会发生此错误消息。例如,您有两个:

  • ~/Controllers/HomeController.cs
  • ~/Areas/Admin/Controllers/HomeController.cs

为了解决此问题(如错误消息所示),您可以在声明路由时使用命名空间。所以在主路由定义中Global.asax

routes.MapRoute(
    "Default",
    "{controller}/{action}/{id}",
    new { controller = "Home", action = "Index", id = UrlParameter.Optional },
    new[] { "AppName.Controllers" }
);

在你的~/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
应用程序。如果您无权访问服务器,请咨询您的托管服务提供商。

2022-04-07