我目前有两个不相关的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。

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


当前回答

即使不使用区域,也可以在RouteMap中指定要使用的名称空间

routes.MapRoute(
    "Default",
    "{controller}/{action}",
    new { controller = "Home", action = "Index" },
    new[] { "NameSpace.OfYour.Controllers" }
);

但听起来真正的问题是你的两个应用程序在IIS中的设置方式

其他回答

如果它能帮助别人,我也面对过这个错误。 这个问题是由我网站上的错误引用引起的。 由于未知的原因,我的网站引用了另一个网站,在相同的解决方案。 一旦我去掉了那个不好的参照,它就开始正常工作了。

我发现这个错误可以发生在传统的ASP。当你在非App_Code目录下创建控制器时(有时Visual Studio会阻止这种情况)。

它将文件类型设置为“Compile”,而添加到“App_Code”中的任何代码都设置为“Content”。如果你复制或移动文件到App_Code,那么它仍然被设置为“Compile”。

我怀疑这与网站项目操作有关,因为网站项目没有任何构建操作。清除bin文件夹并更改为“Content”似乎可以解决这个问题。

如果你想自动解决它..您可以使用应用程序集 只需添加以下代码:

 routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
            namespaces: new[] { string.Format("{0}.Controllers", BuildManager.GetGlobalAsaxType().BaseType.Assembly.GetName().Name) }
        );

看这个…http://www.asp.net/mvc/videos/mvc-2/how-do-i/aspnet-mvc-2-areas

然后这张照片(希望你喜欢我的画)

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