У меня есть следующий код, который успешно работает. Я не могу понять, как вытащить cookie из ответа. Моя цель состоит в том, чтобы иметь возможность устанавливать файлы cookie в запросе и получать файлы cookie из ответа. Мысли?
private async Task<string> Login(string username, string password)
{
try
{
string url = "http://app.agelessemail.com/account/login/";
Uri address = new Uri(url);
var postData = new List<KeyValuePair<string, string>>
{
new KeyValuePair<string, string>("username", username),
new KeyValuePair<string, string>("password ", password)
};
HttpContent content = new FormUrlEncodedContent(postData);
var cookieJar = new CookieContainer();
var handler = new HttpClientHandler
{
CookieContainer = cookieJar,
UseCookies = true,
UseDefaultCredentials = false
};
var client = new HttpClient(handler)
{
BaseAddress = address
};
HttpResponseMessage response = await client.PostAsync(url,content);
response.EnsureSuccessStatusCode();
string body = await response.Content.ReadAsStringAsync();
return body;
}
catch (Exception e)
{
return e.ToString();
}
}
Вот полный ответ:
HttpResponseMessage response = await client.PostAsync(url,content);
response.EnsureSuccessStatusCode();
Uri uri = new Uri(UrlBase);
var responseCookies = cookieJar.GetCookies(uri);
foreach (Cookie cookie in responseCookies)
{
string cookieName = cookie.Name;
string cookieValue = cookie.Value;
}
Могу я из любопытства спросить, почему вы хотите читать файлы cookie на клиенте? Насколько я понимаю, файлы cookie используются для отправки информации на сервер, а не для возврата информации.
—
Darrel Miller
Я использую возвращенный файл cookie для вызовов, которые возвращают JSON, поэтому мне не нужно выполнять отдельный вызов авторизации для каждого вызова JSON. То есть у меня есть журнал вызовов / Home / GetData, который возвращает JSON, но только в случае авторизации. По запросу клиента я добавляю cookie, чтобы / Home / GetData ответил. В противном случае будет указано «403 неавторизовано».
—
Питер Келлнер
Установка заголовка авторизации в качестве заголовка по умолчанию почти так же эффективна и немного более стандартна. У сервера просто нет возможности автоматически установить заголовок auth от имени клиента.
—
Даррел Миллер,
спасибо за подсказку Даррел. У вас есть примеры того, как это может выглядеть в asp.net? Я боролся с этим для моего монотач, а теперь и для моего приложения для магазина Windows. Я был бы счастлив, если бы был простой способ. Это неприятно, особенно с async и await now в приложениях магазина Windows.
—
Питер Келлнер