Lottando cercando di ottenere cookie di risposta con HttpClient in. NET 4.5

Ho il seguente codice che funziona correttamente. Non riesco a capire come ottenere il cookie dalla risposta. Il mio objective è che voglio essere in grado di impostare i cookie nella richiesta e ottenere i cookie dalla risposta. Pensieri?

private async Task Login(string username, string password) { try { string url = "http://app.agelessemail.com/account/login/"; Uri address = new Uri(url); var postData = new List<KeyValuePair> { new KeyValuePair("username", username), new KeyValuePair("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(); } } 

Ecco la risposta 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; } 

Per aggiungere cookie a una richiesta, compilare il contenitore dei cookie prima della richiesta con CookieContainer.Add(uri, cookie) . Dopo aver effettuato la richiesta, il contenitore dei cookie verrà automaticamente compilato con tutti i cookie della risposta. È quindi ansible chiamare GetCookies () per recuperarli.

 CookieContainer cookies = new CookieContainer(); HttpClientHandler handler = new HttpClientHandler(); handler.CookieContainer = cookies; HttpClient client = new HttpClient(handler); HttpResponseMessage response = client.GetAsync("http://google.com").Result; Uri uri = new Uri("http://google.com"); IEnumerable responseCookies = cookies.GetCookies(uri).Cast(); foreach (Cookie cookie in responseCookies) Console.WriteLine(cookie.Name + ": " + cookie.Value); Console.ReadLine(); 

Puoi facilmente ottenere un valore del cookie con l’URL specificato.

 private async Task GetCookieValue(string url, string cookieName) { var cookieContainer = new CookieContainer(); var uri = new Uri(url); using (var httpClientHandler = new HttpClientHandler { CookieContainer = cookieContainer }) { using (var httpClient = new HttpClient(httpClientHandler)) { await httpClient.GetAsync(uri); var cookie = cookieContainer.GetCookies(uri).Cast().FirstOrDefault(x => x.Name == cookieName); return cookie?.Value; } } }