当我提前关闭HttpWebResponse时,Streamreader不起作用

时间:2010-12-01 18:57:35

标签: c# httpwebresponse streamreader

Uri targetUri = new Uri(targetURL);    
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(targetUri);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
StreamReader reader = new StreamReader(response.GetResponseStream());
string data = reader.ReadToEnd();
response.Close();

为什么上面的代码工作正常,但以下代码没有? 请注意,我在以下代码中提前关闭响应。

Uri targetUri = new Uri(targetURL);
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(targetUri);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
StreamReader reader = new StreamReader(response.GetResponseStream());
response.Close();
string data = reader.ReadToEnd();

2 个答案:

答案 0 :(得分:6)

关闭响应也会关闭响应流...所以StreamReader不再需要读取任何内容。

来自WebResponse.Close的文档:

  

Close方法可以清除   WebResponse和。使用的资源   通过关闭基础流   调用Stream.Close方法。

答案 1 :(得分:0)

您的阅读器已使用响应中的流初始化,因此正在使用它。

如果您关闭响应流,则阅读器不再具有可读取的工作基础流。