发现多个类型与名为'Home'的控制器匹配
我目前有两个不相关的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文件夹?
事实:
有人可以证实这是问题吗?
当您使用区域并且在区域和根目录中具有相同的控制器名称时,通常会出现此错误消息。 例如,你有两个:
~/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应用程序托管。 如果您无法访问服务器,请询问您的托管服务提供商。
以下是另一个可能会遇到此错误的场景。 如果您重命名项目以使程序集的文件名发生更改,则可能有两个版本的ASP.NET程序集,这会重现此错误。
解决方案是转到bin
文件夹并删除旧的dll。 (我尝试过“重建项目”,但这并没有删除它们,所以请确保检查bin
以确保它们不在)
在MVC4和MVC5中有点不同,请使用以下内容
/App_Start/RouteConfig.cs
namespace MyNamespace
{
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
namespaces: new[] {"MyNamespace.Controllers"}
);
}
}
}
和地区
context.MapRoute(
"Admin_default",
"Admin/{controller}/{action}/{id}",
new { action = "Index", id = UrlParameter.Optional },
new[] { "MyNamespace.Areas.Admin.Controllers" }
);
链接地址: http://www.djcxy.com/p/89385.html
上一篇: Multiple types were found that match the controller named 'Home'
下一篇: Why c# decimals can't be initialized without the M suffix?