2016-12-06 102 views
0

由於調用HttpClient.SendAsync(),我有一個HttpResponse對象。響應有一個chunked transfer encoding,並導致1.5 GB的數據。通過Owin流式傳輸HttpResponse

我想通過OWIN管道傳遞這些數據。爲此,我需要將其轉換爲流。簡化代碼這樣做是:

public async Task Invoke(IDictionary<string, object> environment) 
{ 
    var httpContent = GetHttpContent(); 
    var responseStream = (Stream)environment["owin.ResponseBody"]; 
    await httpContent.CopyToAsync(responseStream); 
} 

但是,最後一行導致將整個流複製到內存。當我使用wget直接從後端服務器下載數據時,它成功下載並顯示一個進度條(儘管它不知道整體大小,因爲它已被分塊)。但是,當我使用wget從OWIN託管的應用程序下載數據時,它堅持發送請求。

我應該如何通過OWIN管道傳輸這些數據以防止將其複製到內存中?

編輯

這是我如何得到HttpResponse

var client = new HttpClient(new HttpClientHandler()); 
// …and then: 
using (var request = new HttpRequestMessage { RequestUri = uri, Method = HttpMethod.Get }) 
{ 
    return client.SendAsync(request, HttpCompletionOption.ResponseHeadersRead).Result; 
} 
+0

server.DisableResponseBuffering你能告訴你的HttpClient打電話?大多數HttpClient方法默認緩衝響應。你需要一個不像GetStreamAsync或帶有HttpCompletionOption.ResponseHeadersRead的SendAsync。 – Tratcher

+0

我更新了問題。謝謝。 – bpiec

+0

看起來不錯,(除了使用等待結果)。 – Tratcher

回答