调试时获取 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" 我不禁对此表示怀疑。
所以我真正的问题是:如何在 HttpWebResponse
或 Stream
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()),这将最终自行关闭流。
如果在反序列化之前从流中读取全部内容并将其存储在变量中,则在调试时应该能够看到内容
我正在尝试 运行 每 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" 我不禁对此表示怀疑。
所以我真正的问题是:如何在 HttpWebResponse
或 Stream
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()),这将最终自行关闭流。
如果在反序列化之前从流中读取全部内容并将其存储在变量中,则在调试时应该能够看到内容