2011-03-21 95 views
1

我有以下代碼:流不可讀 - 沒有處理,爲什麼這不起作用?

// Create POST data and convert it to a byte array. 
string postData = "name=t&description=tt"; 
byte[] byteArray = Encoding.UTF8.GetBytes(postData); 
// Set the ContentType property of the WebRequest. 
request.ContentType = "application/x-www-form-urlencoded"; 
// Set the ContentLength property of the WebRequest. 
request.ContentLength = byteArray.Length; 
// Get the request stream. 
using (StreamReader reader = new StreamReader(request.GetRequestStream())) 
{ 
    string s = reader.ReadToEnd(); 
} 

當流量擊中使用(.....)語句,我得到以下異常:

流未讀

我想將整個請求流讀入一個字符串,沒有任何東西被關閉,所以代碼應該工作?

+0

什麼是'request'?你在哪裏設定內容? – Cameron 2011-03-21 23:52:29

+0

您不應該試圖寫入流嗎? – 2011-03-21 23:54:46

+0

類似的情況已得到解答,並可能有所幫助,請參閱:http://stackoverflow.com/a/43981770/2791237 – 2017-05-15 14:19:09

回答

3

您寫入請求流並從響應流中讀取。

string postData = "name=t&description=tt"; 
    byte[] byteArray = Encoding.UTF8.GetBytes(postData); 
    // Set the ContentType property of the WebRequest. 
    request.ContentType = "application/x-www-form-urlencoded"; 
    // Set the ContentLength property of the WebRequest. 
    request.ContentLength = byteArray.Length; 
    // Get the request stream. 

    var stream = request.GetRequestStream(); 
    stream.Write(byteArray, 0, byteArray.Length); 
+0

感謝。但是,我能看不到正在發送的請求的xml正文嗎? – dotnetdev 2011-03-22 00:05:07

+0

@dotnetdev - 可能在調試器中。無論如何,它不是XML,它只是你指定的字符串,URL編碼,所以你已經有了內容。 – tvanfosson 2011-03-22 00:09:28

+0

@dotnetdev - 如果你絕對不需要你,可以從HttpWebRequest派生自己的請求類並重寫GetRequestStream,以便它返回包含過濾器的基礎流。您可以讓過濾器將實際的請求存儲到流中,並通過您的課程中的其他屬性提供給您。 – tvanfosson 2011-03-22 00:16:27