Asp.net-Core-Mvc

單獨程序集中的 ASP.NET Core MVC 控制器

  • June 9, 2016

我正在使用 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(&lt;class in external assembly&gt;).Assembly)
 .AddControllersAsServices();

AddApplicationPart 在搜尋控制器時顯式包含程序集。對 AddControllersAsServices() 的呼叫會將所有發現的控制器添加到服務集合中,如果您在此行之後放置斷點並檢查“服務”,您將在集合中看到所有已找到的控制器類型。

您可能還想在這裡查看:https ://docs.asp.net/en/latest/migration/rc1-to-rtm.html#asp-net-5-mvc-compile-views ,因為發現規則現在已更改對於來自 RC1 的控制器。

還要記住使用 IActionResult 而不是 ActionResult!

引用自:https://stackoverflow.com/questions/37725934