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

梦想与她 提交于 2019-12-10 01:17:39

问题


For some reason, when ASP.NET core controllers are created in separate assembly, the TestServer is not able to find controller actions when the client makes a request.(results in 404 response) Why is this? How can I work around it? Here are steps to reproduce.

  1. Create new ASP.NET Core WebAPI using .NET core
  2. Create integration tests in separate project and configure the test to use TestServer() client and get tests to work successfully.
  3. Now, separate the controller into its own shared library and refactor project created in step 1 to use this shared library instead.
  4. Re-run test which contains the TestServer() class. You'll notice now it fails.

See the follwing link for creating the integration tests. Integration testing w/ ASP.NET Core


回答1:


Actually I found a solution for now, see diff below:

It sounds like this may be bug of TestServer() class and how it is hosting the application during the test run.

Here is the line of code in case you cannot read above in image

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



回答2:


In addition to joey answer: There is no need to call Assembly.Load() to resolve this bug. You can use the code below. ServiceHookController is class from a separate project.


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



回答3:


If you follow the pre-requisites from the MS documentation the controllers from separate assemblies are loaded.

In my case adding Microsoft.AspNetCore.Mvc.Testing NuGet package fixed the issue and I don't need to call AddApplicationPart anymore.




回答4:


For those of you experiencing this during a migration to netcoreapp3.0, I found the above answers work, but you can do this more cleanly by changing the reference in your .csproj file itself perhaps.

In my case I changed the first XML line

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

to

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

Credits to: https://github.com/aspnet/Mvc/issues/5992#issuecomment-395408983



来源:https://stackoverflow.com/questions/43669633/why-is-testserver-not-able-to-find-controllers-when-controller-is-in-separate-as

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!