ASP.NET 单独程序集中的核心 MVC 控制器
ASP.NET Core MVC controllers in separate assembly
我正在使用 ASP.NET MVC Core RC-2。我有一个针对完整 .NET 框架的 Web 项目。我在解决方案中还有一个单独的 class 库,也针对完整的框架。
在class库中,我有一个控制器,标有路由属性。我从网络项目中引用了 class 库。该程序集引用了 nuget 包 Microsoft.AspNetCore.Mvc v. 1.0.0-rc2-final
.
我的理解是这个外部控制器会被自动发现,例如
http://www.strathweb.com/2015/04/asp-net-mvc-6-discovers-controllers/
然而,这对我不起作用 - 我浏览到路线的 URL,我得到一个空白页面,它没有到达我的控制器断点。
有什么想法可以让它发挥作用吗?
有趣的是,它似乎确实适用于以 .NET Core Framework 为目标的 Web 项目,引用了一个同样以 .NET Core 为目标的 class 库。但不适用于针对完整框架的 Web 项目,引用标准 .NET class 库。
注意:这是 MVC 核心,它应该支持这种场景而无需任何 MVC<=4 routing overrides。
我相信您在 RC2 中遇到了以下已知问题。
https://github.com/aspnet/Mvc/issues/4674(错误中提到了解决方法)
此问题已从那时起得到修复,但只会在下一个版本中可用(除非您同意使用夜间构建)
在 ASP.Net Core 1.0 中仍然存在问题,不确定现在是否是设计使然。最简单的解决方案是在启动中执行此操作。cs/ConfigureServices
services.AddMvc()
.AddApplicationPart(typeof(<class in external assembly>).Assembly)
.AddControllersAsServices();
AddApplicationPart 在搜索控制器时明确包含程序集。
调用 AddControllersAsServices() 会将所有发现的控制器添加到服务集合中,如果您在此行之后放置一个断点并检查 'services',您将在集合中看到所有已找到的控制器类型。
您可能还想在此处查看:https://docs.asp.net/en/latest/migration/rc1-to-rtm.html#asp-net-5-mvc-compile-views 因为现在针对 RC1 的控制器更改了发现规则。
另外记得使用 IActionResult 而不是 ActionResult!
我正在使用 ASP.NET MVC Core RC-2。我有一个针对完整 .NET 框架的 Web 项目。我在解决方案中还有一个单独的 class 库,也针对完整的框架。
在class库中,我有一个控制器,标有路由属性。我从网络项目中引用了 class 库。该程序集引用了 nuget 包 Microsoft.AspNetCore.Mvc v. 1.0.0-rc2-final
.
我的理解是这个外部控制器会被自动发现,例如 http://www.strathweb.com/2015/04/asp-net-mvc-6-discovers-controllers/
然而,这对我不起作用 - 我浏览到路线的 URL,我得到一个空白页面,它没有到达我的控制器断点。
有什么想法可以让它发挥作用吗?
有趣的是,它似乎确实适用于以 .NET Core Framework 为目标的 Web 项目,引用了一个同样以 .NET Core 为目标的 class 库。但不适用于针对完整框架的 Web 项目,引用标准 .NET class 库。
注意:这是 MVC 核心,它应该支持这种场景而无需任何 MVC<=4 routing overrides。
我相信您在 RC2 中遇到了以下已知问题。 https://github.com/aspnet/Mvc/issues/4674(错误中提到了解决方法)
此问题已从那时起得到修复,但只会在下一个版本中可用(除非您同意使用夜间构建)
在 ASP.Net Core 1.0 中仍然存在问题,不确定现在是否是设计使然。最简单的解决方案是在启动中执行此操作。cs/ConfigureServices
services.AddMvc()
.AddApplicationPart(typeof(<class in external assembly>).Assembly)
.AddControllersAsServices();
AddApplicationPart 在搜索控制器时明确包含程序集。 调用 AddControllersAsServices() 会将所有发现的控制器添加到服务集合中,如果您在此行之后放置一个断点并检查 'services',您将在集合中看到所有已找到的控制器类型。
您可能还想在此处查看:https://docs.asp.net/en/latest/migration/rc1-to-rtm.html#asp-net-5-mvc-compile-views 因为现在针对 RC1 的控制器更改了发现规则。
另外记得使用 IActionResult 而不是 ActionResult!