繁体   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