获取http状态返回ObjectDisposedException

时间:2016-03-01 14:53:42

标签: c# json

我正在尝试从http响应中获取状态代码,如下所示:

try
{
    HttpWebRequest request = WebRequest.Create(requestURI) as HttpWebRequest;
    string text

    using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
    using (var responseStream = new StreamReader(response.GetResponseStream()))
    {
       text = responseStream.ReadToEnd();
    }

    var responseHeader = (HttpWebResponse)request.GetResponse();
    var status = responseHeader.StatusCode;
}
catch (WebException ex)
{
    MessageBox.Show(ex.ToString());
}

问题是我得到了这个例外:

  

System.ObjectDisposedException:“无法访问已删除的对象名称:'System.Net.HttpWebResponse'。”}

就在这一行:var status = responseHeader.StatusCode;

为什么会这样?我想获取状态代码和描述

1 个答案:

答案 0 :(得分:3)

using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)

将在离开使用块后处理响应。

因此,对(HttpWebResponse)request.GetResponse();的另一次调用将抛出异常。此外,因为它是一个网络响应,你不能读两次。

尝试这个替代方案:

HttpWebRequest request = WebRequest.Create(requestURI) as HttpWebRequest;
string text;

HttpStatusCode status;

using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
using (var responseStream = new StreamReader(response.GetResponseStream()))
{
   text = responseStream.ReadToEnd();
   status = response.StatusCode;
}