调试时获取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的内容长度。我不确定这是否是我真正应该关心的事情,但由于我找不到回应"身体",我忍不住对此表示怀疑。
所以我真正的问题是:如何在HttpWebResponse
或Stream
对象中找到"身体"?
还有一个附带的问题:值为-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.Fush();objStream.Close();
当使用"using"语句时,它会调用Dispose()(IDisposable()),它最终会自己关闭流。