在我的项目中遇到同名多个控制器的问题

我遇到了我的ASP.NET MVC 3项目的以下错误:

发现多个与名为“Home”的控制器相匹配的types。 如果为该请求提供服务的路由(“主页/ {操作} / {id}”)没有指定命名空间来search与该请求匹配的控制器,则会发生这种情况。 如果是这种情况,请通过调用带有“namespaces”参数的“MapRoute”方法的重载来注册此路由。

“家”的请求find了以下匹配的控制器:MyCompany.MyProject.WebMvc.Controllers.HomeController MyCompany.MyProject.WebMvc.Areas.Company.Controllers.HomeController

我有一个HomeController在我的默认控制器文件夹中,类名称为MyCompany.MyProject.WebMvc.Controllers.HomeController。

我的RegisterRoutes方法,在我的global.asax,如下所示:

public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute( "Default", // Route name "{controller}/{action}/{id}", // URL with parameters new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults ); } 

然后我有一个名为Company的区域,在该区域的默认控制器文件夹中有一个HomeController,其类名为MyCompany.MyProject.WebMvc.Areas.Company.Controllers.HomeController。

CompanyAreaRegistration文件中的RegisterArea方法如下所示:

  public override void RegisterArea(AreaRegistrationContext context) { context.MapRoute( "Company_default", "Company/{controller}/{action}/{id}", new { area = "Company", action = "Index", id = UrlParameter.Optional } ); } 

这是我在本文开头强调的所有错误。 我正在努力拼凑一个从其他各种职位的解决scheme, 没有运气

是否有可能在默认的控制器文件夹,然后在每个地区有一个HomeController? 如果是这样,我是否需要(假设我这样做)更改我的configuration文件,使其工作?

任何帮助将非常感激!

该错误消息包含推荐的解决scheme:“如果是这种情况,请通过调用带有”namespaces“参数的”MapRoute“方法的重载来注册此路由。

 routes.MapRoute( "Default", // Route name "{controller}/{action}/{id}", // URL with parameters new { controller = "Home", action = "Index", id = UrlParameter.Optional }, // Parameter defaults new string[] { "MyCompany.MyProject.WebMvc.Controllers"} ); 

这将使http://服务器/去你的HomeController的索引行动,这是我想,你想要的。 http:// server / company / home将进入公司区域的HomeController的Index操作,如区域注册中所定义。

这是asp.net mvc4的方法:

  routes.MapRoute( name: "Default", url: "{controller}/{action}/{id}", defaults: new { controller = "Home", action = "RegisterNow", id = UrlParameter.Optional }, namespaces: new[] { "YourCompany.Controllers" } ); 

我已经重命名了命名空间,所以,我只删除文件夹binobj重build ,再次工作。

这个问题的另一个可能的原因可以在下面find:

发现多个types与名为“Home”的控制器匹配

只使用项目的名称:

 Public Class RouteConfig Public Shared Sub RegisterRoutes(ByVal routes As RouteCollection) routes.IgnoreRoute("{resource}.axd/{*pathInfo}") routes.MapRoute( _ name:="Default", _ url:="{controller}/{action}/{id}", _ defaults:=New With {.controller = "Home", .action = "Index", .id = UrlParameter.Optional} _ , namespaces:={"MvcAreas"}) End Sub 

用这个

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

如果您使用的是RazorGenerator,只是通知namespaces参数可能是不够的。

我要解决在Global.asax.cs添加下面标记的语句:

  protected void Application_Start() { AreaRegistration.RegisterAllAreas(); FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); RouteConfig.RegisterRoutes(RouteTable.Routes); BundleConfig.RegisterBundles(BundleTable.Bundles); ControllerBuilder.Current.DefaultNamespaces.Add("MyProject.Controllers"); // This one }