在HttpClient调用中重用会话cookie

时间:2013-11-25 22:37:29

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

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

我现在正尝试使用HttpClient创建一个C#客户端来与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,但它是用于调用登录,执行操作以及在同一请求中注销。

谢谢!

1 个答案:

答案 0 :(得分:0)

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