由於調用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;
}
server.DisableResponseBuffering
你能告訴你的HttpClient打電話?大多數HttpClient方法默認緩衝響應。你需要一個不像GetStreamAsync或帶有HttpCompletionOption.ResponseHeadersRead的SendAsync。 – Tratcher我更新了問題。謝謝。 – bpiec
看起來不錯,(除了使用等待結果)。 – Tratcher