單獨程序集中的 ASP.NET Core MVC 控制器
我正在使用 ASP.NET MVC Core RC-2。我有一個針對完整 .NET 框架的 Web 項目。我在解決方案中還有一個單獨的類庫,也針對完整的框架。
在類庫中,我有一個控制器,標有路由屬性。我已經從 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 Core Framework 為目標的 Web 項目,它引用了一個也以 .NET Core 為目標的類庫。但不適用於針對完整框架、引用標準 .NET 類庫的 Web 項目。
注意:這是 MVC Core,它應該支持這種場景而無需任何MVC<=4 路由覆蓋。
我相信您在 RC2 中遇到了以下已知問題。 <https://github.com/aspnet/Mvc/issues/4674>(bug 中提到了解決方法)
從那時起,此問題已得到修復,但僅在下一個版本中可用(除非您可以使用夜間建構)
在 ASP.Net Core 1.0 中仍然是一個問題,現在不確定它是否是設計使然。最簡單的解決方案是在 Startup.cs/ConfigureServices 中執行此操作
services.AddMvc() .AddApplicationPart(typeof(<class in external assembly>).Assembly) .AddControllersAsServices();AddApplicationPart 在搜尋控制器時顯式包含程序集。對 AddControllersAsServices() 的呼叫會將所有發現的控制器添加到服務集合中,如果您在此行之後放置斷點並檢查“服務”,您將在集合中看到所有已找到的控制器類型。
您可能還想在這裡查看:https ://docs.asp.net/en/latest/migration/rc1-to-rtm.html#asp-net-5-mvc-compile-views ,因為發現規則現在已更改對於來自 RC1 的控制器。
還要記住使用 IActionResult 而不是 ActionResult!