【问题标题】:This operation cannot be performed after the request has been submitted in HttpWebRequest在 HttpWebRequest 中提交请求后无法执行此操作
【发布时间】:2018-09-05 17:24:50
【问题描述】:

下面的代码出错了。

HttpWebRequest webRequest = WebRequest.Create(URL) as HttpWebRequest;
webRequest.CookieContainer = cookies;
StreamReader responseReader = new StreamReader(webRequest.GetResponse().GetResponseStream());
HttpWebResponse response = (HttpWebResponse)webRequest.GetResponse();
response.Cookies = webRequest.CookieContainer.GetCookies(webRequest.RequestUri); //Error here
string responseData = responseReader.ReadToEnd();
responseReader.Close();

错误:System.InvalidOperationException:提交请求后无法执行此操作。 在 System.Net.HttpWebRequest.GetResponse()

上面的代码有什么问题?

【问题讨论】:

  • cookies 应该已经是返回响应的一部分。
  • 我还需要为所有请求维护一个 cookie,我已经删除了 cookie 但仍然出现相同的错误

标签: c# asp.net-core httpwebrequest


【解决方案1】:

HttpWebResponse.Cookies Property 应该已经包含与响应关联的 cookie。

您还应该避免多次致电GetResponse

var cookies = new CookieContainer();

HttpWebRequest webRequest = WebRequest.Create(URL) as HttpWebRequest;
webRequest.CookieContainer = cookies;

var response = (HttpWebResponse)webRequest.GetResponse();

using (var responseReader = new StreamReader(response.GetResponseStream())) {
    var responseCookies = response.Cookies;
    string responseData = responseReader.ReadToEnd();
    //...
}

您可以将 cookie 容器重复用于后续请求,因为它们会由响应添加

【讨论】:

  • 是的。这是对GetResponse 的第二次呼叫。
  • 现在,我只使用了一次 GetResponse,然后它工作正常。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-23
  • 2016-02-08
  • 2020-08-16
  • 2023-03-03
  • 2019-10-01
  • 2021-03-28
相关资源
最近更新 更多