ASP.NET MVC-在同一解决方案中多个控制器冲突

ASP.NET MVC-在同一解决方案中多个控制器冲突,asp.net,model-view-controller,controller,solution,Asp.net,Model View Controller,Controller,Solution,我在同一个解决方案中有两个web项目,第一个启动,第二个给我一个错误: “找到了多个与名为'Home'的控制器匹配的类型。如果为该请求提供服务的路由('Home/{action}/{id}'),则可能发生这种情况。”未指定名称空间以搜索与请求匹配的控制器。如果是这种情况,请通过调用采用“namespaces”参数的“MapRoute”方法的重载来注册此路由。“ 我具体说明: 这两个项目具有不同的名称空间(Intranet/Extranet) 这两个项目完全独立 这两个项目没有相互参照 我不想添

我在同一个解决方案中有两个web项目,第一个启动,第二个给我一个错误:

“找到了多个与名为'Home'的控制器匹配的类型。如果为该请求提供服务的路由('Home/{action}/{id}'),则可能发生这种情况。”未指定名称空间以搜索与请求匹配的控制器。如果是这种情况,请通过调用采用“namespaces”参数的“MapRoute”方法的重载来注册此路由。“

我具体说明:

  • 这两个项目具有不同的名称空间(Intranet/Extranet)
  • 这两个项目完全独立
  • 这两个项目没有相互参照
  • 我不想添加区域
  • 这两个项目(正在开发)托管在我的本地IIS上,每个项目都有不同的域名(intranet.lan/extranet.lan)
我不明白如何告诉VisualStudio不要查看其他项目。这种行为真的很不正常,我认为这是一个bug或者一个非常糟糕的设计策略

我还假设我读过很多关于这个主题的帖子,但没有找到任何答案。每个人都会创建一个区域(我不想,因为在一个项目中创建一个区域并不是“干净的”,只是为了这个项目是完全愚蠢和不合逻辑的)

如果有人能帮我,那就太好了

编辑:

我将我的Extranet项目放在一个单独的目录中,创建一个新的解决方案并添加它。我将它配置为在IIS Express下启动,它还告诉我它找到了两个控制器。内联网和外联网。但是,在extranet项目中,Ctrl+F加上“Intranet”不会给出任何结果。我还打开了项目和解决方案文件,但找不到任何对Intranet的引用。令人难以置信的是,Intranet项目似乎链接到了extranet,但代码中没有任何引用或链接。甚至在重建项目之后

编辑2:

我试过了

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


但是没有效果。

经过几次搜索,我终于找到了它。实际上,有必要为每个项目指定路由中的名称空间,如下所示:

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

routes.MapRoute(
    "Default",
    "{controller}/{action}/{id}",
    new { controller = "Home", action = "Index", id = UrlParameter.Optional },
    namespaces: new[] { "Extranet.Controllers" }
);
但仅仅清洁和再生溶液是不够的。还需要删除bin/obj的内容并重新生成项目。我向微软报告了这个错误,因为我为此搜索了数小时。我有信心清理这个项目,我不该这么做


非常感谢@tno2007

这能回答你的问题吗@PedroCoelho此解决方案的问题在于,它强制将控制器定义为附加参数。因此,这是一种异端,因为它不再是一条路线。你必须定义尽可能多的路线,因为有控制器。完全疯狂的行为。我将我的Extranet项目放在一个单独的目录中,创建一个新的解决方案并添加它。我将它配置为在IIS Express下启动,它还告诉我它找到了两个控制器。内联网和外联网。但是,在extranet项目中,Ctrl+F加上“Intranet”不会给出任何结果。我还打开了项目和解决方案文件,但找不到任何对Intranet的引用。令人难以置信的是,Intranet项目似乎链接到了extranet,但代码中没有任何引用或链接。甚至在重建项目之后。
routes.MapRoute(
    "Default",
    "{controller}/{action}/{id}",
    new { controller = "Home", action = "Index", id = UrlParameter.Optional },
    namespaces: new[] { "Intranet.Controllers" }
);

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