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

时间:2016-05-06 08:07:22

标签: c# asynchronous stream httpclient

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

3 个答案:

答案 0 :(得分:6)

如果您想使用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选项,它告诉客户不要将整个内容读入内存。

答案 1 :(得分:2)

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

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

答案 2 :(得分:0)

您可以使用HttpWebRequest代替HttpClient吗?

它们提供了异步方法,并且可以通过设置method属性来在post和get之间切换。

e.g:

var request = (HttpWebRequest) WebRequest.Create(uri);
request.Method = "POST";
var postStream = await request.GetRequestStreamAsync()