2013-02-05 33 views
2

我有以下代碼:的StreamReader返回空字符串

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(); 

所以我覺得問題在於這種或下一行。不知道如何繼續,幫助將不勝感激。

+0

對我來說沒問題。你確定返回的數據是文本嗎?同時檢查文本編碼。 – leppie

+0

你爲什麼使用'Trim()'?你確定'Trim()'沒有吃數據嗎? – Lloyd

+0

通常情況下,響應流將阻塞,直到所有數據到達。嘗試使用HttpWebRequest和HttpWebResponse的相同代碼。 –

回答

0

可能是「req.GetResponse();」需要更多的時間.....當你把這個斷點拿到時間來完成任務。

你需要檢查我遇到了類似的問題

resp.StatusDescription 

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

來到,而在WebResponse的使用CopyToAsync(),原來該流的指針是在結束了Stream的結尾(它的指針位置等於它的長度)。

如果是這樣的話,你可以用下面的讀取字符串的內容之前復位指針...

var responseStream = resp.GetResponseStream(); 

responseStream.Seek(0, SeekOrigin.Begin); 

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

雖然,因爲你直接讀取數據流,而不是將其複製進入一個新的MemoryStream,這可能不適用於你的情況。