调试时获取HttpWebResponse的内容

本文关键字:HttpWebResponse 获取 调试 | 更新日期: 2023-09-27 18:00:07

我试图每10秒对一个web 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视图在调试模式下找到"原始"响应内容,但我真的找不到

我可以找到响应标头和许多其他信息,据我所见,除了一个例外,这看起来还可以;显示-1的内容长度。我不确定这是否是我真正应该关心的事情,但由于我找不到回应"身体",我忍不住对此表示怀疑。

所以我真正的问题是:如何在HttpWebResponseStream对象中找到"身体"?

还有一个附带的问题:值为-1的内容长度值得担心吗。

调试时获取HttpWebResponse的内容

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

对于调试,我建议您将响应复制到字符串中,并以这种方式进行观察。

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.Fush();objStream.Close();

当使用"using"语句时,它会调用Dispose()(IDisposable()),它最终会自己关闭流。