使用ASP.NETCORE TESTSERVER托管的WebAPI的HTTPCLIENT连接问题



在单位测试用例中,TestServer用于WebAPI的内存托管。之后,我们试图使用这样的代码将HttpConnection用于此托管的WebAPI:

HttpClient client= new HttpClient();
client.BaseAddress("url");
client.GetAsync("url").Result();

此代码给出了一个异常,带有错误消息

"连接拒绝"。

但是,如果我们使用以下代码获取HttpClient对象并按照上述步骤操作,则可以正常工作。

TestServer.CreateClient() 

它背后的原因是什么?是因为它是内存的托管WebAPI吗?没有实际的http上下文?

是设计。当您致电TestServer.CreateClient()时,创建了一个具有 special HttpMessageHandler的客户端。该处理程序允许直接调用测试的API,而无需将其公开为HTTP服务器:

public class TestServer : IServer, IDisposable
{
    public HttpClient CreateClient()
    {
        HttpClient httpClient = new HttpClient(this.CreateHandler());
        ...
    }
}

应该更快且适合单位测试。对于集成测试,请在测试启动时运行kestrel服务器。

P.S。我希望您的应用设计在DI而不是明确的建筑物方面变得更好。很好,您以这种方式解决了问题。

最新更新