我想重用一个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;
}
答案 0 :(得分:9)
您无法重复使用WebRequest。获取返回的HttpWebResponse.Cookies,构建一个新的WebRequest并填充HttpWebRequest.CookieContainer。 (您需要在第一个请求中分配CookieContainer才能返回Cookie。)