Eu tenho o seguinte código que funciona com sucesso. Não consigo descobrir como tirar o cookie da resposta. Meu objetivo é poder definir cookies na solicitação e obter cookies da resposta. Pensamentos?
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();
}
}
Aqui está a resposta completa:
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;
}
Por curiosidade, posso perguntar por que você deseja ler cookies no cliente? Meu entendimento é que os cookies são usados para enviar informações ao servidor, não para retornar informações.
—
Darrel Miller
Eu uso o cookie retornado em chamadas que retornam JSON para que não precise fazer uma chamada de autorização separada para cada chamada JSON. Ou seja, tenho um registro de chamadas / Home / GetData que retorna JSON, mas somente se autorizado. Na solicitação do cliente, adiciono o cookie para que / Home / GetData responda. Caso contrário, dirá "403" não autorizado.
—
Peter Kellner
Definir o cabeçalho de autorização como um cabeçalho padrão é quase tão eficaz e um pouco mais padrão. Simplesmente não há como o servidor definir o cabeçalho de autenticação automaticamente em nome do cliente.
—
Darrel Miller
obrigado pela dica Darrel. Você tem algum exemplo de como isso pode ser no asp.net? Lutei com isso para o meu monotouch e agora meu aplicativo da Windows Store. Eu ficaria feliz se houvesse uma maneira simples. Isso é uma dor, especialmente com async e await now nos aplicativos da Windows Store.
—
Peter Kellner