c# – 内存HttpServer如何知道要承载哪个WebAPI项目?

前端之家收集整理的这篇文章主要介绍了c# – 内存HttpServer如何知道要承载哪个WebAPI项目?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想使用流行的内存托管策略对WebAPI项目运行测试.

我的测试驻留在一个单独的项目中.

这是我测试的开始

[TestMethod]
    public void TestMethod1()
    {
        HttpConfiguration config = new HttpConfiguration();

        config.Routes.MapHttpRoute(
            name: "DefaultApi",routeTemplate: "api/{controller}/{id}",defaults: new {id = RouteParameter.Optional});

        HttpServer server = new HttpServer(config);
        HttpMessageInvoker client = new HttpMessageInvoker(server)
    }

客户端使用HttpServer初始化,建立直接的客户端 – 服务器连接.

除了提供路由配置信息,HttpServer如何知道要承载哪个WebAPI项目?

如何同时托管多个WebAPI项目?

似乎HttpServer有一些魔术来定位WebAPI项目?

谢谢

解决方法

Web API依赖于一个名为IAssembliesResolver的服务来获取所有的程序集并扫描它们来查找实现IHttpController接口的控制器.

现在有时Web API可能无法找到您的控制器,具体取决于程序集是否已加载到当前的应用程序域.在这种情况下,您需要确保加载程序集.

看看你的示例测试代码,看起来你不是指Web API项目中的任何类型,在这种情况下,我认为Web API项目的程序集将不会被加载.

此外,您似乎在测试中再次注册路由.我建议您使用Web API项目的WebApiConfig.Register(HttpConfiguration)来执行所有注册内容.这样,您将使用与您的Web API项目相同的设置进行测试.

笔记:

>当使用内存服务器运行测试时,您的请求/响应将不会通过格式化程序的序列化/反序列化过程,这是非常危险的,因为您可能会遇到真正的问题.所以你需要确保照顾这个.很久以前,我写了一篇关于这个的博文.你可以看看here.> Fiddler工具在查看原始请求/响应以诊断任何问题时非常有用.如果您正在进行内存测试,您将失去此能力.

猜你在找的C#相关文章