通用应用程序Windows 8.1 httpclient,其中的cookie在WP8.1上运行但在Windows 8.1上运行

时间:2014-10-02 07:08:54

标签: cookies httpclient windows-8.1 windows-phone-8.1 win-universal-app

我有这个代码在Windows Phone 8.1上运行得非常好。

不幸的是它在Windows 8.1上不起作用。我从这个请求得到的响应给了我一个会话过期的页面,就像没有cookie一样。代码看起来很好,但看起来cookie没有设置或我错过了其他东西......

是否需要添加某些内容才能使其适用于Windows应用商店应用?

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

   using (var client = new HttpClient(handler))
            {
                client.DefaultRequestHeaders.Add("Cookie", value.ToString());
                htmlPage = await client.GetStringAsync("https://www.someurl.com" + querystring);
            }

2 个答案:

答案 0 :(得分:1)

您的代码可以正常传入标题,但不能传递Cookie。请尝试使用此代码:

        HttpClientHandler handler = new HttpClientHandler();
        handler.CookieContainer.Add(new Uri("http://www.microsoft.com"), new Cookie("MyCookieName", "MyCookieValue"));
        using (var client = new HttpClient(handler))
        {
            htmlPage = await client.GetStringAsync("https://www.microsoft.com");
        }

答案 1 :(得分:0)

System.Net.Http似乎在W8.1上的工作方式与在WP8.1上的工作方式不同。我永远无法弄清楚差异。

尽管如此,我使用Windows.Web.Http重写了我的代码,这是8.1上的新功能,建议使用。这里是一个如何使用新的httpclient附加cookie的示例:

var bpf = new Windows.Web.Http.Filters.HttpBaseProtocolFilter();
var cm = bpf.CookieManager;
var cookie = new HttpCookie("name", ".example.com", "/") { Value = "value" };
cm.SetCookie(cookie);
var http = new HttpClient(bpf);
await http.PostAsync(new Uri("http://example.com/"), new HttpStringContent("content"));

以及这里的样本:

http://code.msdn.microsoft.com/windowsapps/HttpClient-sample-55700664