'Why does Stream.CanRead return false when calling GetResponseStream() second time on HttpWebResponse object
In the below sample code, streamSupportsReading is 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;
}
Solution 1:[1]
It's because you put response.GetResponseStream() in a using block, so it gets disposed before GetFile() returns, making it unusable.
If you were to not dispose it, then CanRead would still be true:
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;
}
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | Gabriel Luci |
