写入开始后无法设置此属性!在C#WebRequest对象上

时间:2010-04-17 22:37:10

标签: c#

我想重用一个WebRequest对象,以便保存cookie和会话以便以后向服务器请求。以下是我的代码。如果我在第二次使用Post功能两次

  

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;
}

1 个答案:

答案 0 :(得分:9)

您无法重复使用WebRequest。获取返回的HttpWebResponse.Cookies,构建一个新的WebRequest并填充HttpWebRequest.CookieContainer。 (您需要在第一个请求中分配CookieContainer才能返回Cookie。)