[英]Why does Stream.CanRead return false when calling GetResponseStream() second time on HttpWebResponse object
In the below sample code, streamSupportsReading
is false.在下面的示例代码中,
streamSupportsReading
为 false。
private void SomeFunction()
{
HttpWebResponse responseObj = GetFile();
bool streamSupportsReading = responseObj.GetResponseStream().CanRead;
}
private HttpWebResponse GetFile()
{
var request = (HttpWebRequest)HttpWebRequest.Create("URL");
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
using (var stream = response.GetResponseStream())
{
using (var bytes = new MemoryStream())
{
var buffer = new byte[256];
while (bytes.Length < response.ContentLength)
{
var read = stream.Read(buffer, 0, buffer.Length);
//code to calculate download percentage
}
}
}
return response;
}
It's because you put response.GetResponseStream()
in a using
block, so it gets disposed before GetFile()
returns, making it unusable.这是因为您将
response.GetResponseStream()
放在using
块中,因此它在GetFile()
返回之前被处置,使其无法使用。
If you were to not dispose it, then CanRead
would still be true:如果您不处理它,那么
CanRead
仍然是正确的:
private HttpWebResponse GetFile()
{
var request = (HttpWebRequest)HttpWebRequest.Create("URL");
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
var stream = response.GetResponseStream();
using (var bytes = new MemoryStream())
{
var buffer = new byte[256];
while (bytes.Length < response.ContentLength)
{
var read = stream.Read(buffer, 0, buffer.Length);
//code to calculate download percentage
}
}
return response;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.