2017-04-21 64 views
1

在單元測試用例中,TestServer用於WebAPI的內存中託管。在此之後,我們正努力使HttpConnection這個使用像這樣的代碼託管的WebAPI:使用Asp.NetCore託管的WebAPI的HttpClient連接問題TestServer

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

該代碼給出了一個例外,錯誤消息

「連接被拒絕」。

但是,如果我們使用下面的代碼獲取HttpClient對象並按照上述步驟操作,則它工作正常。

TestServer.CreateClient() 

背後的原因是什麼?是因爲它是內存中託管的WebAPI嗎?沒有實際的Http上下文嗎?

+0

好了,花了一些時間,但沒有成功...並沒有從這裏得到任何幫助..最後,我改變了代碼,通過依賴注入將HttpClient傳遞給控制器​​。它按預期運行良好。 – Munish

回答

0

這是設計。當您致電TestServer.CreateClient()客戶專用HttpMessageHandler已創建。該處理程序可以直接調用測試的API而不暴露它作爲HTTP服務器:

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

這應該是更快和足夠適合於單元測試。對於集成測試,請在測試啓動時運行Kestrel服務器。

P.S.我希望你的應用程序設計在使用DI而不是顯式構建時變得更好。這很好,你用這種方式解決了這個問題。