【发布时间】: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-idcookie 不存在。
标签: c# asp.net-web-api session-cookies dotnet-httpclient