代码之家  ›  专栏  ›  技术社区  ›  Lasse V. Karlsen

如何告诉ASP.NET核心MVC框架哪些程序集包含我的控制器?[副本]

  •  1
  • Lasse V. Karlsen  · 技术社区  · 6 年前

    我正在使用ASP.NET MVC Core RC-2。我有一个针对完整.NET框架的web项目。我在解决方案中还有一个单独的类库,也针对整个框架。

    在类库中,我有一个控制器,用route属性标记。我已经从web项目中引用了类库。此程序集引用了nuget包 Microsoft.AspNetCore.Mvc v. 1.0.0-rc2-final .

    据我所知,这个外部控制器将被自动发现,例如。 http://www.strathweb.com/2015/04/asp-net-mvc-6-discovers-controllers/

    但是这对我不起作用-我浏览到路由的URL,得到一个空白页面,它没有到达我的控制器断点。

    有什么办法让它工作吗?

    有趣的是,它似乎确实适用于以.NET核心框架为目标的web项目,引用的类库也以.NET核心为目标。但不适用于以整个框架为目标、引用标准.NET类库的web项目。

    注意:这是MVC核心,它应该支持这种场景,而不需要任何 MVC<=4 routing overrides .

    0 回复  |  直到 7 年前
        1
  •  7
  •   Kiran    8 年前

    我相信你在RC2中遇到了以下已知问题。 https://github.com/aspnet/Mvc/issues/4674 (错误中提到了解决方法)

    从那时起,这个问题就被修复了,但只在下一个版本中可用(除非您可以使用夜间构建)

        2
  •  68
  •   Peter Ruderman    6 年前

    仍然是ASP.Net Core1.0中的一个问题,现在不确定它是否是按设计的。最简单的解决方案是在Startup.cs/ConfigureServices中执行此操作

    services.AddMvc()
      .AddApplicationPart(typeof(<class in external assembly>).Assembly)
      .AddControllersAsServices();
    

    AddApplicationPart在搜索控制器时显式包含程序集。 对addControllerAsservices()的调用将把所有发现的控制器添加到服务集合中,如果在此行之后放置一个断点并检查“services”,您将在集合中看到找到的所有控制器类型。

    您也可以在这里查看: https://docs.asp.net/en/latest/migration/rc1-to-rtm.html#asp-net-5-mvc-compile-views 因为现在RC1中的控制器的发现规则已更改。

    还要记住使用IActionResult而不是ActionResult!