2016-12-06 34 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

回答