22

VS2010+ .NET 4.0+ System.Net.Http(from )を使用してNugetいます。

理解できない理由により、で受け取ったセッションCookieHttpResponseMessageは自動的にに保存されませんHttpClient CookieContainer。私のコードは次のようになります。

CookieContainer cookies = new CookieContainer();
HttpClientHandler handler = new HttpClientHandler();
handler.CookieContainer = cookies;
HttpClient client = new HttpClient(handler);

Uri site = new Uri("https://www.mywebsite.com");
var response1 = client.SendAsync(new HttpRequestMessage(HttpMethod.Get,site)).Result;

応答ヘッダーで、次のことがわかります。

Set-Cookie: JSESSIONID=FC8110E434C2C6DAB78B4E335024A639; Path=/member; Secure

しかし、私のクッキーコンテナは空のままです...なぜですか?

4

4 に答える 4

19

次のコードを使用して、応答から Cookie を取得します。

/// <summary>
/// Read web cookies
/// </summary>
public static CookieContainer ReadCookies(this HttpResponseMessage response)
{
    var pageUri = response.RequestMessage.RequestUri;

    var cookieContainer = new CookieContainer();
    IEnumerable<string> cookies;
    if (response.Headers.TryGetValues("set-cookie", out cookies))
    {
        foreach (var c in cookies)
        {
            cookieContainer.SetCookies(pageUri, c);
        }
    }

    return cookieContainer;
}
于 2014-08-03T19:01:31.110 に答える
11

問題は、あなたの Cookie が安全であることだと思います。問題は、CookieContainer が後続の HTTP 要求で安全な Cookie をサーバーに送り返さないことです。バグかもしれませんし、何らかの理由があるかもしれません。

回避策は、Cookie を手動で CookieContainer に再度追加することです。この方法では、Cookie をサーバーに送り返すときにセキュアが定義されないため、Cookie は HTTP 要求ヘッダーで送り返されます。

詳細については、この記事を参照してください。

于 2013-02-04T06:08:33.187 に答える