c# - 如何在 C# 中读取 Http 响应流两次?

标签 c# stream

我正在尝试通过以下方式读取 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;
}

关于c# - 如何在 C# 中读取 Http 响应流两次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/147941/

相关文章:

C# 特殊字符的正则表达式是什么

image - Xamarin 图像数据在流副本上无效

powershell - 如何仅在 PowerShell 中的变量中捕获错误输出

c# - 有没有办法在 Windows 8 (WinRT) 中唯一标识用户?

Java 流操作

java - 当使用 ObjectOutputStream/ObjectInputStream 传输自定义对象时,变量将被重置

c# - 在功能列表操作中,我们怎么称呼 "inserting something between each item"?

c# - 统计MVC中Child的记录数

c# - 合并 List<> 并保持同一性

c# - 检测到 ContextSwitchDeadlock