首页 > 解决方案 > 如何在 UWP 上使用 cookie 发出 HTTP 请求?

问题描述

我想在正确处理 cookie 的同时向远程服务器发出 http 请求(例如,存储服务器发送的 cookie,并在我发出后续请求时发送这些 cookie)。保留所有cookies会很好

标签: httpcookiesuwpwindows-10-universal

解决方案


Windows.Web.Http.HttpClient如果您将 的实例传递HttpBaseProtocolFilter给其构造函数,则内置函数可以管理 cookie。然后这个类有一个CookieManager包含 cookie 的属性,您甚至可以修改它并为下一个请求添加自定义 cookie。

但是,您应该改为引用System.Net.HttpNuGet 包并使用它HttpClient,它始终是最新的并定期更新。在这种情况下,HttpClient该类在其构造函数中接受一个HttpClientHandler实例,而该类又具有以CookieContainer与 中类似的方式工作CookieManager的属性Windows.Web.Http

System.Net.Http.HttpClient

发送自定义 cookie

var handler = new HttpClientHandler()
{
    CookieContainer = new System.Net.CookieContainer(),
    UseCookies = true
};
var client = new System.Net.Http.HttpClient(handler);
handler.CookieContainer.Add(targetUri, new System.Net.Cookie("name", "value"));
var response = await client.GetAsync(targetUri);

检索 cookie

var cookie = handler.CookieContainer["name"];

Windows.Web.Http.HttpClient

发送自定义 cookie

var filter = new Windows.Web.Http.Filters.HttpBaseProtocolFilter()
{
    CookieUsageBehavior = Windows.Web.Http.Filters.HttpCookieUsageBehavior.Default
};
filter.CookieManager.SetCookie(new Windows.Web.Http.HttpCookie("name", "domain", "path")
{
    Value = "value"
});
var client =  new Windows.Web.Http.HttpClient(filter);
var response = await client.GetAsync(targetUri);

检索 cookie

var cookie = filter.CookieManager.GetCookies(targetUri).
              FirstOrDefault(cookie => cookie.Name == "name");

推荐阅读