Как я могу дважды прочитать поток ответов Http в С#?
Я пытаюсь дважды прочитать поток ответов Http через:
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
stream = response.GetResponseStream();
RssReader reader = new RssReader(stream);
do
{
element = reader.Read();
if (element is RssChannel)
{
feed.Channels.Add((RssChannel)element);
}
} while (element != null);
StreamReader sr = new StreamReader(stream);
feed._FeedRawData = sr.ReadToEnd();
Однако, когда код StreamReader выполняется, данные не возвращаются, потому что поток уже достиг конца. Я попытался reset поток через stream.Position = 0, но это вызывает исключение (я думаю, потому что поток не может изменить свою позицию вручную).
В принципе, я хотел бы проанализировать поток для XML и получить доступ к необработанным данным (в строковом формате).
Любые идеи?
Ответы
Ответ 1
Скопируйте его в новый MemoryStream. Затем вы можете перечитать MemoryStream столько раз, сколько хотите:
Stream responseStream = CopyAndClose(resp.GetResponseStream());
// Do something with the stream
responseStream.Position = 0;
// Do something with the stream again
private static Stream CopyAndClose(Stream inputStream)
{
const int readSize = 256;
byte[] buffer = new byte[readSize];
MemoryStream ms = new MemoryStream();
int count = inputStream.Read(buffer, 0, readSize);
while (count > 0)
{
ms.Write(buffer, 0, count);
count = inputStream.Read(buffer, 0, readSize);
}
ms.Position = 0;
inputStream.Close();
return ms;
}
Ответ 2
Вы пытались сбросить позицию потока?
если это не сработает, вы можете скопировать поток в MemoryStream, и там вы можете reset позицию (т.е. 0) так часто, как вы хотите.