我正在使用 ASP.NET MVC Core RC-2。我有一个针对完整 .NET 框架的 Web 项目。我在解决方案中还有一个单独的类库,也针对完整的框架。
在类库中,我有一个控制器,标有路由属性。我已经从网络项目中引用了类库。该程序集引用了 nuget 包Microsoft.AspNetCore.Mvc v. 1.0.0-rc2-final
.
据我了解,这个外部控制器会被自动发现,例如http://www.strathweb.com/2015/04/asp-net-mvc-6-discovers-controllers/ http://www.strathweb.com/2015/04/asp-net-mvc-6-discovers-controllers/
然而这对我不起作用——我浏览到路由的 URL,然后得到一个空白页面,并且它没有到达我的控制器断点。
有什么想法如何让它发挥作用吗?
有趣的是,它似乎确实适用于针对 .NET Core Framework 的 Web 项目,引用了也针对 .NET Core 的类库。但不适用于针对完整框架、引用标准 .NET 类库的 Web 项目。
注意:这是 MVC Core,它应该支持这种场景,无需任何MVC. https://stackoverflow.com/questions/7560005/how-to-register-a-controller-into-asp-net-mvc-when-the-controller-class-is-in-a
在 ASP.Net Core 1.0 中仍然是一个问题,不确定现在是否是设计使然。最简单的解决方案是在 Startup.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 https://docs.asp.net/en/latest/migration/rc1-to-rtm.html#asp-net-5-mvc-compile-views因为现在针对 RC1 的控制器更改了发现规则。
还要记住使用 IActionResult 而不是 ActionResult!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)