C# Web API中的路由在我的集成测试中不起作用

C# Web API中的路由在我的集成测试中不起作用,c#,asp.net,asp.net-web-api,asp.net-mvc-routing,C#,Asp.net,Asp.net Web Api,Asp.net Mvc Routing,以下是我的解决方案结构: 项目A(类库):API控制器的主要功能 项目B(类库):API控制器的附加功能 项目C(ASP.NET Web):Web API主机(仅包含Global.asax和配置代码) 项目D(MS测试):Web API集成测试 在我的项目D中,我有项目A中所有控制器的测试用例,它们都运行良好。但是,对于我为项目B中的控制器编写的集成测试用例,我不断收到错误404:未找到与名为“通知”的控制器匹配的类型。 我的尝试: 我最初有属性路由,认为属性路由可能有问题,并删除了属性,

以下是我的解决方案结构:

  • 项目A(类库):API控制器的主要功能
  • 项目B(类库):API控制器的附加功能
  • 项目C(ASP.NET Web):Web API主机(仅包含Global.asax和配置代码)
  • 项目D(MS测试):Web API集成测试
在我的项目D中,我有项目A中所有控制器的测试用例,它们都运行良好。但是,对于我为项目B中的控制器编写的集成测试用例,我不断收到错误404:
未找到与名为“通知”的控制器匹配的类型。

我的尝试:

  • 我最初有属性路由,认为属性路由可能有问题,并删除了属性,更改了URL以匹配默认路由,但我仍然有相同的问题
  • 我认为程序集没有被加载,因为没有直接使用,因此我通过调用typeof(NotificationsController)强制加载类型,并对返回值运行断言
  • 我使用常规浏览器对此进行了测试,并且能够得到属性路由的结果
  • 我检查了
    NotificationsController
    实际上是从
    ApiController
    派生的(当然是通过另一个基类,但对于我所有的API控制器来说,这是相同的基类)
我的测试代码初始化如下所示:

var config = new HttpConfiguration();
config.IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.Always;

WebApp.Start(config);

HttpServer = new HttpServer(config);
GlobalConfiguration.Configure(WebApp.Start);
我的
Global.asax
代码在项目C中如下所示:

var config = new HttpConfiguration();
config.IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.Always;

WebApp.Start(config);

HttpServer = new HttpServer(config);
GlobalConfiguration.Configure(WebApp.Start);
在我的
WebApp.Start
方法中,我确实调用了
config.EnsureInitialized()
。我不确定这是否有任何后果,但我正在使用Unity DI,并确保Unity配置也在流中发生


在这一点上我可能遗漏了什么?我该如何进一步调试它。非常感谢您的帮助。

最后,我想,我找到了根本原因

我的测试代码初始化被放置在一个静态方法中,该方法上有
[AssemblyInitialize]
属性。我现在已经删除了它,并将其更改为单例模式,并允许在第一次使用时进行初始化。我要确保在首次使用之前加载我的
通知控制器
类型。这就解决了我的问题

到目前为止,这一直在加载我的控制器