2010-04-17 1 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 в первом запросе, чтобы вернуть Cookies.)

+0

Как насчет сеансов? (это то же самое с cookie?) – EBAG

+0

Сессии обычно реализуются с использованием файлов cookie. – dtb

+0

Я, хотя эти сессии php - это серверная вещь! поэтому они основаны на cookie? – EBAG

Смежные вопросы