如何从HttpResponseMessage获取当前cookie /会话ID?

时间:2012-11-08 08:54:24

标签: http asp.net-web-api .net-4.5 system.net.httpwebrequest

我尝试使用System.net.http中新的.net 4.5 HttpClient。

我像这样设置我的客户

CookieContainer cookieJar = new CookieContainer();
         HttpClientHandler handler = new HttpClientHandler
         {
             CookieContainer = cookieJar,
             AllowAutoRedirect = true
         };
         handler.UseCookies = true;
         handler.UseDefaultCredentials = false;

         HttpClient client = new HttpClient(handler as HttpMessageHandler);

然后我做client.GetAsync(url)

现在我正在检查响应并尝试获取以下帖子的cookie /会话值。

我尝试通过代码测试现有页面的登录方案......

如何在回复中获取Cookie信息?或者我走错了路? 任何解释都会很棒......

3 个答案:

答案 0 :(得分:3)

cookie以标头的形式存在,标头是在客户端上创建cookie的指令。这些标题的形式为" Set-Cookie"作为实际标题,其值为" CookieTitle = {form encoded value}"。获得该cookie看起来像这样:

var cookieTitle = "MyCookieTitle";

var response = ... // get response object
var cookie = response.Headers.GetValues("Set-Cookie").First(x => x.StartsWith(cookieTitle));

这会得到标题的原始字符串,如下所示:

CookieTitle=this+is+the+value+of+the+cookie

答案 1 :(得分:0)

您可以查看HTTP响应的“Set-Cookie”标头。

答案 2 :(得分:0)

您无需获取Cookie并为下次POST重新指定它们。 HttpClient将为您做好准备。

只要您发布到的URL位于Cookie定义的路径中,cookie就会自动重新发送请求。

例如,如果您像这样创建cookie,

 public class CookieController : ApiController
    {
        public HttpResponseMessage Get() {
            var httpResponseMessage = new HttpResponseMessage();
            var cookieHeaderValues = new List<CookieHeaderValue>();
            cookieHeaderValues.Add(new CookieHeaderValue("foo","bar") 
                                         {Domain = "myhost",Path = "/"});
            httpResponseMessage.Headers.AddCookies(cookieHeaderValues);
            return  httpResponseMessage;
        }
    }

http://myhost/以下任何网址的任何请求都会自动发送此Cookie。