C# read from HttpResponseMessage
本文关键字:HttpResponseMessage from read | 更新日期: 2023-09-27 18:13:15
我是第一次使用。net的Httpclient,发现它很难。我已经设法调用服务器,并从它接收响应,但卡在读取响应。下面是我的代码:
if (Method == HttpVerb.POST)
response = client.PostAsync(domain, new StringContent(parameters)).Result;
else
response = client.GetAsync(domain).Result;
if (response != null)
{
var responseValue = string.Empty;
Task task = response.Content.ReadAsStreamAsync().ContinueWith(t =>
{
var stream = t.Result;
using (var reader = new StreamReader(stream))
{
responseValue = reader.ReadToEnd();
}
});
return responseValue;
}
responseValue包含{},尽管服务正在返回数据。我应该如何解决这个问题?
您正在创建一个异步任务,但在返回之前没有等待它完成。这意味着你的responseValue
永远不会被设置。
要解决这个问题,在返回之前执行以下操作:
task.Wait();
那么你的函数现在看起来是这样的:
if (Method == HttpVerb.POST)
response = client.PostAsync(domain, new StringContent(parameters)).Result;
else
response = client.GetAsync(domain).Result;
if (response != null)
{
var responseValue = string.Empty;
Task task = response.Content.ReadAsStreamAsync().ContinueWith(t =>
{
var stream = t.Result;
using (var reader = new StreamReader(stream))
{
responseValue = reader.ReadToEnd();
}
});
task.Wait();
return responseValue;
}
如果您更喜欢使用await
(您可能应该这样做),那么您需要将此代码包含在async
中。所以这:
public string GetStuffFromSomewhere()
{
//Code above goes here
task.Wait();
}
就变成:
public async string GetStuffFromSomewhere()
{
//Code above goes here
await ...
}
试试这个
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(obj.Url);
HttpWebResponse response = null;
try
{
response = request.GetResponse() as HttpWebResponse;
}
catch (Exception ex)
{
}