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



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

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

我指定:

  • 这两个项目有不同的名称空间(Intranet/Extranet(
  • 这两个项目是完全独立的
  • 这两个项目互不参考
  • 我不想添加区域
  • 这两个项目(正在开发中(托管在我的本地IIS上,每个项目都有不同的域名(intranet.lan/extranet.lan(

我不明白如何告诉Visual Studio不要在其他项目中查找。这种行为真的很不正常,我认为这是一个错误或非常糟糕的设计策略。

我还认为我读了很多关于这个主题的帖子,但从未找到任何答案。每个人都会创建一个区域(我不想,因为在项目中仅仅为项目创建区域并不"干净",这完全是愚蠢和不合逻辑的事情(。

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

编辑:

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

第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[] { "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的内容并重新生成项目。我向微软报告了这个错误,因为我为此搜索了几个小时。我有信心清理这个项目,但我不应该这样做。

发现多个类型与名为';帐户';。MVC 4&使用RouteConfig.CS

非常感谢@tno2007

最新更新