Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Windows.Web.Http.HttpClient:接收cookie并保存它们_C#_.net_Cookies_Windows Runtime_Httpclient - Fatal编程技术网

C# Windows.Web.Http.HttpClient:接收cookie并保存它们

C# Windows.Web.Http.HttpClient:接收cookie并保存它们,c#,.net,cookies,windows-runtime,httpclient,C#,.net,Cookies,Windows Runtime,Httpclient,我需要一些关于新的Windows.Web.Http.HttpClient类的帮助。我现在正在写我的第一个WP8.1应用程序,它让我发疯。我正在登录这样一个网站: var values = new Dictionary<string, string>(); values.Add("login_username", _username); values.Add("login_password", _password); values.Add("login_lifetime", "3600

我需要一些关于新的
Windows.Web.Http.HttpClient
类的帮助。我现在正在写我的第一个WP8.1应用程序,它让我发疯。我正在登录这样一个网站:

var values = new Dictionary<string, string>();
values.Add("login_username", _username);
values.Add("login_password", _password);
values.Add("login_lifetime", "36000");

var parameters = new HttpFormUrlEncodedContent(values);
var response = await Forum.Http.PostAsync(new Uri("http://foo.bar.xyz"), parameters);

var buffer = await response.Content.ReadAsBufferAsync();
byte[] byteArray = buffer.ToArray();
string content = Encoding.UTF8.GetString(byteArray, 0, byteArray.Length);

if (content.Contains("Wrong password/user name"))
{
        return false;
}

return true;
public static HttpBaseProtocolFilter Filter = new HttpBaseProtocolFilter();
public static HttpClient Http = new HttpClient(Filter);
Cookies.Add(new HttpCookie("Name", "Value") { Domain="http://foo.bar.xyz" });

登录正常,但不会保存网站登录后发送的cookies。如何保存它们以及如何在每个GetAsync()上将它们发送到网站?

您可以使用HttpClientHandler而不是HttpBaseProtocolFilter。如果必须使用HttpBaseProtocolFilter,那么HttpCookieManager类型的只读CookieManager属性可以帮助您

下面是一个使用HttpClientHandler的示例:

public static CookieContainer Cookies = new CookieContainer();
public static HttpClientHandler HttpClientHandler = new HttpClientHandler() { CookieContainer = Cookies };
public static HttpClient Http = new HttpClient(HttpClientHandler);
在PostAsync()调用返回后,可以提取cookies

var uri = new Uri("http://foo.bar.xyz");
var response = await Forum.Http.PostAsync(uri, parameters);
IEnumerable<Cookie> responseCookies = Cookies.GetCookies(uri).Cast<Cookie>();
foreach (Cookie cookie in responseCookies) {
    Console.WriteLine(cookie.Name + ": " + cookie.Value);
}

据我所知,Windows.Web.Http.HttpClient不使用HttpClientHandler。我错了吗?我实现了您的解决方案(必须改用System.Net.Http.HttpClient)。一切正常。但它不会接收或保存任何cookies。我的烹饪容器还是空的。这真让我发疯。