【问题标题】:ASP.NET MVC - Multiples controllers conflicts in same solutionASP.NET MVC - 同一解决方案中的多个控制器冲突
【发布时间】:2023-03-31 11:10:01
【问题描述】:

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

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

我指定:

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

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

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

如果有人可以帮助我,那就太好了。

编辑:

我将我的 Extranet 项目放在一个单独的目录中,我创建了一个新的解决方案并添加了它。我将它配置为在 IIS Express 下启动,它还告诉我它找到了两个控制器。内联网和外联网。但是,在 Extranet 项目中带有“Intranet”的 Ctrl + F 没有给出任何结果。我还打开了项目和解决方案文件,但找不到任何对 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[] { "Extranet.Controllers" }
);

但没有效果。

【问题讨论】:

  • @PedroCoelho 这个解决方案的问题是它强制将控制器定义为附加参数。因此,它是异端,因为它根本不再是一条路线。您必须定义与控制器一样多的路由。
  • 完全疯狂的行为。我将我的 Extranet 项目放在一个单独的目录中,我创建了一个新的解决方案并添加了它。我将它配置为在 IIS Express 下启动,它还告诉我它找到了两个控制器。内联网和外联网。但是,在 Extranet 项目中带有“Intranet”的 Ctrl + F 没有给出任何结果。我还打开了项目和解决方案文件,但找不到任何对 Intranet 的引用。令人难以置信的是,Intranet 项目似乎链接到 Extranet,但在代码中没有任何引用或议论。即使在重建项目之后。

标签: asp.net model-view-controller controller solution


【解决方案1】:

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

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

Multiple types were found that match the controller named 'Account'. MVC 4 & using RouteConfig.CS

非常感谢@tno2007

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-03
    • 1970-01-01
    • 1970-01-01
    • 2015-08-03
    • 1970-01-01
    相关资源
    最近更新 更多