2010-04-17 265 views
1

我想重用一個WebRequest對象,以便cookie和會話將被保存以便稍後請求到服務器。以下是我的代碼。如果我在第二次使用Post函數兩次寫入開始後無法設置此屬性!在一個C#WebRequest對象

request.ContentLength = byteArray.Length;

它會拋出一個異常

寫作開始後,這個屬性不能被設置!

但你可以看到

dataStream.Close();

應該關閉寫入過程!任何人都知道發生了什麼事?

static WebRequest request; 

public MainForm() 
{ 
    request = WebRequest.Create("http://localhost/admin/admin.php"); 
} 

static string Post(string url, string data) 
{ 
    request.Method = "POST"; 
    byte[] byteArray = Encoding.UTF8.GetBytes(data); 
    request.ContentType = "application/x-www-form-urlencoded"; 
    request.ContentLength = byteArray.Length; 
    Stream dataStream = request.GetRequestStream(); 
    dataStream.Write(byteArray, 0, byteArray.Length); 
    dataStream.Close(); 
    WebResponse response = request.GetResponse(); 
    Console.WriteLine(((HttpWebResponse)response).StatusDescription); 
    dataStream = response.GetResponseStream(); 
    StreamReader reader = new StreamReader(dataStream); 
    string responseFromServer = reader.ReadToEnd(); 
    Console.WriteLine(responseFromServer); 
    reader.Close(); 
    dataStream.Close(); 
    response.Close(); 
    request.Abort(); 
    return responseFromServer; 
} 

回答

9

您無法重用WebRequest。以返回的HttpWebResponse.Cookies,構建新的WebRequest並填寫HttpWebRequest.CookieContainer。 (您需要在第一次請求中指定CookieContainer以獲取返回的Cookie。)

+0

會話如何? (這是否與cookie相同?) – EBAG 2010-04-17 22:42:56

+0

會話通常使用cookie來實現。 – dtb 2010-04-17 22:43:38

+0

我雖然那個PHP會話是服務器端的事情!所以他們基於cookie? – EBAG 2010-04-17 22:44:35

相關問題