如何在 UWP 上使用 cookie 发出 HTTP 请求?

How do I make an HTTP request using cookies on UWP?

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

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

但是,您应该引用 System.Net.Http NuGet 包并使用它的 HttpClient,它始终是最新的并定期更新。在这种情况下,HttpClient class 在其构造函数中接受一个 HttpClientHandler 实例,而此 class 又具有 CookieContainer 属性,它在与 Windows.Web.Http.

中的 CookieManager 类似的方式

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");