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包含{},尽管服务正在返回数据。我应该如何解决这个问题?

C# read from HttpResponseMessage

您正在创建一个异步任务,但在返回之前没有等待它完成。这意味着你的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)
                    {
                    }
相关文章:
  • 没有找到相关文章