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集成测试
未找到与名为“通知”的控制器匹配的类型。
我的尝试:
- 我最初有属性路由,认为属性路由可能有问题,并删除了属性,更改了URL以匹配默认路由,但我仍然有相同的问题
- 我认为程序集没有被加载,因为没有直接使用,因此我通过调用typeof(NotificationsController)强制加载类型,并对返回值运行断言
- 我使用常规浏览器对此进行了测试,并且能够得到属性路由的结果
- 我检查了
实际上是从NotificationsController
派生的(当然是通过另一个基类,但对于我所有的API控制器来说,这是相同的基类)ApiController
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]
属性。我现在已经删除了它,并将其更改为单例模式,并允许在第一次使用时进行初始化。我要确保在首次使用之前加载我的通知控制器类型。这就解决了我的问题
到目前为止,这一直在加载我的控制器