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

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

发现了与名为“Home”的控制器匹配的多种类型。这 如果服务此请求的路由会发生什么 ('{controller}/{action}/{id}')不指定要搜索的名称空间 与请求匹配的控制器。 如果是这样的话, 通过调用'MapRoute'方法的重载来注册这个路由 它接受一个“namespaces”参数。

我的主机的工作方式是,他给我FTP访问权限,在这个文件夹中,我有另外两个文件夹,一个用于我的应用程序。

ftpFolderA2 - foo。com ftpFolderA2 / bar。com

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

当我上传并尝试运行bar.com时,上面的问题触发并阻止我使用我的网站。同时,foo.com还在运作。

是bar.com搜索从ftpFolderA2内部的控制器,这就是为什么它正在寻找另一个HomeController?我怎么能告诉它只看在控制器文件夹,因为它应该?

事实:

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

有人能确认是这个问题吗?


当前回答

可能还有另一种情况,即使你已经遵循了在区域中路由的所有步骤(比如在全局路由表中给出命名空间),也就是:

你可能没有将全局控制器包装在命名空间中 你在路由中提供了。

Eg:

这样做:

public class HomeController : Controller
{

而不是:

namespace GivenNamespace.Controllers
{
   public class HomeController : Controller
   {

其他回答

可能还有另一种情况,即使你已经遵循了在区域中路由的所有步骤(比如在全局路由表中给出命名空间),也就是:

你可能没有将全局控制器包装在命名空间中 你在路由中提供了。

Eg:

这样做:

public class HomeController : Controller
{

而不是:

namespace GivenNamespace.Controllers
{
   public class HomeController : Controller
   {

在另一种情况下,您可能会遇到这种错误。如果重命名项目以使程序集的文件名发生变化,则可以拥有两个版本的ASP。NET程序集,该程序集将重现此错误。

解决方案是转到bin文件夹并删除旧的dll。(我尝试了“重建项目”,但这并没有删除他们,所以一定要检查bin以确保他们已经消失了)

右键单击项目并选择清除项目。或者完全清空bin目录,然后重新构建。这将清除以前构建的任何剩余程序集

我只是有这个问题,但只有当我发布到我的网站,在我的本地调试运行良好。我发现我必须从我的网络主机上使用FTP,进入我的发布目录并删除BIN文件夹中的文件,当我发布时,在本地删除它们没有任何作用。

我也面临着类似的问题。主要原因是我在两个不同的区域有相同的控制器。一旦我移除其中一个,它的工作很好。

这对你有帮助。