C# StreamReader返回空字符串

C# StreamReader返回空字符串,c#,http,get,streamreader,getresponse,C#,Http,Get,Streamreader,Getresponse,我有以下代码: 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.

我有以下代码:

  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();
因此,我认为问题在于这一行或后续行。不知道如何继续,我们将不胜感激。

可能需要“req.GetResponse();”花费更多时间。。。。。当你设定断点时,是时候完成任务了

你需要检查一下

resp.StatusDescription
以前

System.IO.StreamReader sr = new System.IO.StreamReader(resp.GetResponseStream());

在WebResponse上使用CopyToAsync()时,我遇到了一个类似的问题,结果是流的指针结束在流的末尾(它的指针位置等于它的长度)

如果是这种情况,您可以在读取字符串内容之前使用以下命令重置指针

var responseStream = resp.GetResponseStream();

responseStream.Seek(0, SeekOrigin.Begin);

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

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

在我看来没问题。您确定返回的数据是文本吗?还要检查文本编码。为什么要使用
Trim()
?您确定
Trim()
没有吃掉数据吗?通常响应流会阻塞,直到所有数据到达。使用HttpWebRequest和HttpWebResponse尝试相同的代码。