我试图通过以下两次读取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代码执行时,没有返回数据,因为流现在已经到达终点.我尝试通过stream.Position = 0重置流,但这会引发异常(我认为因为流不能手动更改其位置).
基本上,我想解析XML的流并且可以访问原始数据(以字符串格式).
有任何想法吗?
首先将其复制到新的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; }