出于某种原因,当ASP.NET核心控制器在单独的程序集中创建时,TestServer在客户端发出请求时无法找到控制器操作。(导致404响应)为什么会这样?我该如何解决这个问题? 以下是重现的步骤。
请参阅以下链接以创建集成测试。 Integration testing w/ ASP.NET Core
答案 0 :(得分:31)
听起来这可能是TestServer()类的错误以及它在测试运行期间如何托管应用程序。
以下是您无法在图片中阅读的代码行 .AddApplicationPart(Assembly.Load(new AssemblyName(" WebApiToReproduceBug.Controllers")));
答案 1 :(得分:8)
除了乔伊回答:
无需调用Assembly.Load()即可解决此错误。您可以使用下面的代码。 ServiceHookController
是来自单独项目的课程。
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc()
.AddApplicationPart(typeof(ServiceHookController).Assembly);
}
答案 2 :(得分:2)
对于那些在迁移到netcoreapp3.0
期间遇到此问题的人,我发现上述答案有效,但是您可以通过更改.csproj文件本身中的引用来更干净地完成此操作。
就我而言,我更改了第一行XML
<Project Sdk="Microsoft.NET.Sdk">
到
<Project Sdk="Microsoft.NET.Sdk.Web">
信用至:https://github.com/aspnet/Mvc/issues/5992#issuecomment-395408983
答案 3 :(得分:1)
如果遵循pre-requisites from the MS documentation,则会加载来自单独程序集的控制器。
就我而言,添加Microsoft.AspNetCore.Mvc.Testing NuGet package解决了该问题,我不再需要致电tbl like/love
te be defined, but I think a table with:
id
id_from
id_to
type (like/love/other)
。