【问题标题】:This property cannot be set after writing has started! on a C# WebRequest Object写入开始后无法设置此属性!在 C# WebRequest 对象上
【发布时间】:2010-04-17 22:37:10
【问题描述】:

我想重用一个 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;
}

【问题讨论】:

    标签: c#


    【解决方案1】:

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

    【讨论】:

    • 会话怎么样? (和cookie一样吗?)
    • 会话通常使用 cookie 实现。
    • 我认为 php 会话是服务器端的东西!所以它们是基于 cookie 的?
    • PHP 会话依赖于 PHP 会话 ID。这通常作为 cookie 传输或附加到查询字符串。
    猜你喜欢
    • 1970-01-01
    • 2014-11-29
    • 2015-03-14
    • 2010-12-04
    • 1970-01-01
    • 2015-08-14
    • 1970-01-01
    • 2015-08-06
    相关资源
    最近更新 更多