调试时获取HttpWebResponse的内容

时间:2016-08-04 12:21:11

标签: c# httpwebresponse

我正在尝试每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值得烦恼。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

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()),它将自动关闭流。