调试时获取 HttpWebResponse 的内容

Get content of HttpWebResponse while debugging

我正在尝试 运行 每 10 秒向网络 api url 顺序请求以记录返回数据的变化。代码片段如下所示:

using (Stream objStream = response.GetResponseStream())
{
    query result = (query)serializer.Deserialize(objStream);
    Console.WriteLine(result.results.quote.Name + " " + result.results.quote.Ask);
    objStream.Flush();
    objStream.Close();
}

当 运行 反序列化时,有时会抛出一个 InvalidOperationException 并显示 XML 文档格式错误的消息。为了隔离问题,我尝试使用 autos/locals/watch 视图在调试模式下找到 "raw" 响应内容,但我真的找不到它。

我可以找到回复 header 和很多其他信息,据我所知,这看起来还不错,只有一个例外; content-length 显示 -1。我不确定这是否真的是我应该关心的事情,但由于找不到回复 "body" 我不禁对此表示怀疑。

所以我真正的问题是:如何在 HttpWebResponseStream object 中找到 "body"?

还有附带的问题:content-length 的值为 -1 是否值得担心。

对于调试,我建议您将响应复制到字符串中,这样您就可以观看它。

using (Stream objStream = response.GetResponseStream())
{
  StreamReader sr = new StreamReader(objStream);

  string response = sr.ReadToEnd();
  objStream.Seek(0,SeekOrigin.Begin); // Get the pointer back to the begining.                

    query result = (query)serializer.Deserialize(objStream);
    Console.WriteLine(result.results.quote.Name + " " + result.results.quote.Ask);
    objStream.Flush(); // remove
    objStream.Close();//remove
}

我还建议删除: objStream.Flush(); objStream.Close();

当使用 'using' 语句时,它会调用 Dispose() (IDisposable()),这将最终自行关闭流。

如果在反序列化之前从流中读取全部内容并将其存储在变量中,则在调试时应该能够看到内容