c#:如何使用httpclient发布异步请求并获取流?

c#:如何使用httpclient发布异步请求并获取流?,c#,asynchronous,stream,httpclient,C#,Asynchronous,Stream,Httpclient,我需要向服务器发送异步请求,并从响应流中获取信息。 我使用的是HttpClient.GetStreamAsync(),但应该使用POST的服务器响应。是否有类似于PostStreamAsync()的方法?谢谢。也许您应该使用HttpClient而不是HttpClient 它们提供了异步方法和通过设置方法属性在post和get之间切换的可能性 e、 g: 使用HttpClient.PostAsync可以通过HttpResponseMessage.Content.ReadAsStreamAsync(

我需要向服务器发送异步请求,并从响应流中获取信息。
我使用的是HttpClient.GetStreamAsync(),但应该使用POST的服务器响应。是否有类似于PostStreamAsync()的方法?谢谢。

也许您应该使用HttpClient而不是HttpClient

它们提供了异步方法和通过设置
方法
属性在post和get之间切换的可能性

e、 g:


使用
HttpClient.PostAsync
可以通过
HttpResponseMessage.Content.ReadAsStreamAsync()
方法获取响应流

var message = await client.PostAsync(url, content);
var stream = await message.Content.ReadAsStreamAsync();

如果要使用
HttpClient
来流式传输大数据,则不应使用
PostAsync
因为
message.Content.ReadAsStreamAsync
会将整个流读取到内存中。相反,您可以使用以下代码块

var message = new HttpRequestMessage(HttpMethod.Post, "http://localhost:3100/api/test");
var response = await client.SendAsync(message, HttpCompletionOption.ResponseHeadersRead);
var stream = await response.Content.ReadAsStreamAsync();

这里的关键是
HttpCompletionOption.ResponseHeadersRead
选项,它告诉客户端不要将整个内容读入内存。

注意,这将把整个流读入内存。当用户计划使用流媒体时,这通常不是他们所期望的。
var message = new HttpRequestMessage(HttpMethod.Post, "http://localhost:3100/api/test");
var response = await client.SendAsync(message, HttpCompletionOption.ResponseHeadersRead);
var stream = await response.Content.ReadAsStreamAsync();