3

我有以下代码:

  System.Net.WebRequest req = System.Net.WebRequest.Create(url);
  req.Credentials = new NetworkCredential("admin", "password");
  System.Net.WebResponse resp = req.GetResponse();
  System.IO.StreamReader sr = new System.IO.StreamReader(resp.GetResponseStream());
  var result = sr.ReadToEnd().Trim();

当我运行代码时,结果只是一个空字符串。但是,当我单步执行代码时,结果是一个包含数据的字符串,正如我所期望的,当我在这一行上放置一个断点时:

System.Net.WebResponse resp = req.GetResponse();

所以我认为问题在于这一行或后续行。不知道如何进行,将不胜感激。

4

2 回答 2

3

我在 WebResponse 上使用 CopyToAsync() 时遇到了类似的问题,结果表明 Stream 的指针最终位于 Stream 的末尾(它的指针位置等于它的长度)。

如果是这种情况,您可以在读取字符串内容之前重置指针,如下所示...

var responseStream = resp.GetResponseStream();

responseStream.Seek(0, SeekOrigin.Begin);

var sr = new StreamReader(responseStream);
var result = sr.ReadToEnd().Trim();

虽然,由于您是直接读取流,而不是将其复制到新的 MemoryStream 中,但这可能不适用于您的情况。

于 2013-06-20T09:58:12.380 回答
0

可能是 “req.GetResponse();” 花费更多时间......当你设置断点时,它有时间完成任务。

你需要检查

resp.StatusDescription

System.IO.StreamReader sr = new System.IO.StreamReader(resp.GetResponseStream());
于 2013-02-05T11:10:23.313 回答