繁体   English   中英

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

[英]c#: How to Post async request and get stream with httpclient?

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

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

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

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

可能你应该使用HttpWebRequest而不是HttpClient?

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

例如:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM