【发布时间】:2019-02-15 21:16:54
【问题描述】:
我想在正确处理 cookie 的同时向远程服务器发出 http 请求(例如,存储服务器发送的 cookie,并在我发出后续请求时发送这些 cookie)。最好保留所有 cookie
【问题讨论】:
标签: http cookies uwp windows-10-universal
我想在正确处理 cookie 的同时向远程服务器发出 http 请求(例如,存储服务器发送的 cookie,并在我发出后续请求时发送这些 cookie)。最好保留所有 cookie
【问题讨论】:
标签: http cookies uwp windows-10-universal
如果您将HttpBaseProtocolFilter 的实例传递给其构造函数,则内置的Windows.Web.Http.HttpClient 可以管理cookie。然后这个类有一个 CookieManager 属性,其中包含 cookie,您甚至可以修改它并为下一个请求添加自定义 cookie。
但是,您应该改为引用System.Net.Http NuGet 包并使用它的HttpClient,它始终是最新的并定期更新。在这种情况下,HttpClient 类在其构造函数中接受 HttpClientHandler 实例,而此类又具有 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");
【讨论】: