【问题标题】:Reusing session cookie in HttpClient calls在 HttpClient 调用中重用会话 cookie
【发布时间】:2014-01-07 03:42:21
【问题描述】:

我有一个使用基于 cookie 的会话的 Web API 2 项目供我们内部使用。我创建了 /api/login/api/logout 操作,使用浏览器访问它可以正常工作。

我现在正在尝试创建一个 C# 客户端以使用 HttpClient 与 API 进行通信。我可以使用以下方式正常登录:

Uri loginUri =  new Uri("http://localhost/api", "login");
HttpResponseMessage response = _http.PostAsJsonAsync(loginUri, loginModel).Result;

我可以通过

从cookie中获取会话ID字符串
var cookies = _httpHandler.CookieContainer.GetCookies(uri);
if (cookies["session_id"] != null)
    sessionID = cookies["session_id"].Value;

我的问题是:对于包括注销请求在内的每个后续请求,如何在请求标头中包含session_id cookie?如果可能,我想在会话期间重用 HttpClient 对象。我看到this question and answer,但它是用于在同一个请求中调用登录、执行操作和注销。

谢谢!

【问题讨论】:

  • 只是出于好奇,为什么要使用 web api 的 session?
  • 你需要在哪个请求头中放入session id?如果它是 cookie 标头,那么这将自动发生。否则使用 DefaultRequestHeaders。
  • @kaptan 我需要与旧版服务器保持 TCP 连接。 @DarrelMiller 我在 Set-Cookie 标头中需要它。我试过了。当我发送下一个请求时,session-id cookie 不存在。

标签: c# asp.net-web-api session-cookies dotnet-httpclient


【解决方案1】:

我最终返回并使用了我在 MVC 项目中使用的相同 FormsAuthentication 方法。因此,在调用我的自定义 MembershipProvider 之后,我使用 FormsAuthentication 方法来设置和跟踪我的会话 cookie。我打电话给FormsAuthentication.SetAuthCookie() 登录和FormsAuthentication.SignOut() 退出。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-07
    • 1970-01-01
    • 2011-08-04
    • 2012-11-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-24
    • 1970-01-01
    相关资源
    最近更新 更多