簡體   English   中英

當控制器位於 asp.net 核心應用程序的單獨程序集中時,為什么 TestServer 無法找到控制器?

[英]Why is TestServer not able to find controllers when controller is in separate assembly for asp.net core app?

出於某種原因,當在單獨的程序集中創建 ASP.NET 核心控制器時,當客戶端發出請求時,TestServer 無法找到控制器操作。(導致 404 響應)這是為什么? 我該如何解決? 以下是重現的步驟。

  1. 使用 .NET Core 創建新的 ASP.NET Core WebAPI
  2. 在單獨的項目中創建集成測試並將測試配置為使用 TestServer() 客戶端並使測試成功運行。
  3. 現在,將控制器分離到它自己的共享庫中,並重構在步驟 1 中創建的項目以改用此共享庫。
  4. 重新運行包含 TestServer() 類的測試。 你現在會注意到它失敗了。

請參閱以下鏈接以創建集成測試。 使用 ASP.NET Core 進行集成測試

實際上我現在找到了一個解決方案,請參閱下面的差異: 在此處輸入圖片說明

聽起來這可能是 TestServer() 類的錯誤以及它在測試運行期間如何托管應用程序。

這是代碼行,以防您無法閱讀上面的圖片

.AddApplicationPart(Assembly.Load(new AssemblyName("WebApiToReproduceBug.Controllers"))); 

對於那些在遷移到netcoreapp3.0期間遇到這種情況的netcoreapp3.0 ,我發現上述答案有效,但是您可以通過更改 .csproj 文件本身中的引用來更干凈地完成此操作。

就我而言,我更改了第一行 XML

<Project Sdk="Microsoft.NET.Sdk">

<Project Sdk="Microsoft.NET.Sdk.Web">

致謝: https : //github.com/aspnet/Mvc/issues/5992#issuecomment-395408983

除了 joey 回答:沒有必要調用 Assembly.Load() 來解決這個錯誤。 您可以使用下面的代碼。 ServiceHookController是來自一個單獨項目的類。


public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc()
        .AddApplicationPart(typeof(ServiceHookController).Assembly);
}

如果您遵循MS 文檔中先決條件,則會加載來自不同程序集的控制器。

在我的情況下,添加Microsoft.AspNetCore.Mvc.Testing NuGet 包解決了這個問題,我不再需要調用AddApplicationPart了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM