2016-03-01 73 views
0

我试图获取状态代码HTTP响应返回,就像这样:GET HTTP状态返回的ObjectDisposedException

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;

为什么这样?我想获取状态码和说明

+0

为数不多的例外情况处置实际上是所谓往往:-) – Stefan

+1

你缺少的“;” 'string text'后 – Jacobr365

回答

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; 
} 
+0

哦,我现在明白了,谢谢.. – Sandokan

+0

但如果我想使用变量'状态'也出使用?我怎样才能做到这一点? – Sandokan

+0

您可以像使用'text'一样将声明带到using语句之外。 '我会更新答案,但我不确定返回类型。 – Stefan