C# 通过Owin传输HttpResponse

C# 通过Owin传输HttpResponse,c#,stream,owin,dotnet-httpclient,C#,Stream,Owin,Dotnet Httpclient,由于HttpClient.SendAsync()调用,我有一个HttpResponse对象。该响应具有一个新的属性,并产生1.5 GB的数据 我想通过OWIN管道传递这些数据。为此,我需要将其转换为流。执行此操作的简化代码是: 公共异步任务调用(IDictionary环境) { var httpContent=GetHttpContent(); var responseStream=(流)环境[“owin.responseBy”]; 等待httpContent.CopyToAsync(respo

由于
HttpClient.SendAsync()
调用,我有一个
HttpResponse
对象。该响应具有一个新的属性,并产生1.5 GB的数据

我想通过OWIN管道传递这些数据。为此,我需要将其转换为流。执行此操作的简化代码是:

公共异步任务调用(IDictionary环境)
{
var httpContent=GetHttpContent();
var responseStream=(流)环境[“owin.responseBy”];
等待httpContent.CopyToAsync(responseStream);
}
但是,最后一行会将整个流复制到内存中。当我使用
wget
直接从后端服务器下载数据时,数据被成功下载并显示一个进度条(尽管由于数据被分块,它不知道总大小)。但是当我使用
wget
从我的OWIN托管应用程序下载数据时,它会坚持发送请求

我应该如何通过OWIN管道传输这些数据,以防止将其复制到内存中

编辑

这就是我获取HttpResponse的方法:

var-client=newhttpclient(newhttpclienthandler());
//…然后:
使用(var request=newhttprequestmessage{RequestUri=uri,Method=HttpMethod.Get})
{
返回client.sendaync(请求,HttpCompletionOption.ResponseHeadersRead).Result;
}

我想这是在IIS中?System.Web还缓冲响应:

请参阅中的
server.DisableResponseBuffering

我想这是在IIS中?System.Web还缓冲响应:

请参阅中的
server.DisableResponseBuffering

您可以显示您的HttpClient呼叫吗?默认情况下,大多数HttpClient方法都会缓冲响应。您需要一个不需要的,比如GetStreamAsync或SendAsync with HttpCompletionOption.ResponseHeadersRead。我更新了问题。谢谢。看起来还可以(除了使用wait而不是Result)。你能显示你的HttpClient呼叫吗?默认情况下,大多数HttpClient方法都会缓冲响应。您需要一个不需要的,比如GetStreamAsync或SendAsync with HttpCompletionOption.ResponseHeadersRead。我更新了问题。谢谢。看起来还可以(除了使用wait而不是Result)。是的,它托管在IIS上。但是我们根本不使用System.Web(我们甚至没有对它的引用)。IIS上的OWIN使用System.Web(Microsoft.OWIN.Host.SystemWeb)是的,它托管在IIS上。但是我们根本不使用System.Web(我们甚至没有对它的引用)。IIS上的OWIN使用System.Web(Microsoft.OWIN.Host.SystemWeb)