Come faccio a impostare un cookie su HttpRequestMessage di HttpClient

Sto cercando di usare HttpClient di web api per fare un post su un endpoint che richiede il login sotto forma di un cookie HTTP che identifica un account (questo è solo qualcosa che è #ifdef ‘ed out della versione di rilascio).

Come aggiungo un cookie a HttpRequestMessage ?

Ecco come puoi impostare un valore cookie personalizzato per la richiesta:

 var baseAddress = new Uri("http://example.com"); var cookieContainer = new CookieContainer(); using (var handler = new HttpClientHandler() { CookieContainer = cookieContainer }) using (var client = new HttpClient(handler) { BaseAddress = baseAddress }) { var content = new FormUrlEncodedContent(new[] { new KeyValuePair("foo", "bar"), new KeyValuePair("baz", "bazinga"), }); cookieContainer.Add(baseAddress, new Cookie("CookieName", "cookie_value")); var result = client.PostAsync("/test", content).Result; result.EnsureSuccessStatusCode(); } 

La risposta accettata è il modo corretto per farlo nella maggior parte dei casi. Tuttavia, ci sono alcune situazioni in cui si desidera impostare manualmente l’intestazione del cookie. Normalmente se si imposta un’intestazione “Cookie” viene ignorata, ma ciò HttpClientHandler perché HttpClientHandler utilizza per impostazione predefinita la sua proprietà CookieContainer per i cookie. Se disabiliti quello, impostando UseCookies su false puoi impostare manualmente le intestazioni dei cookie e appariranno nella richiesta, ad es

 var baseAddress = new Uri("http://example.com"); using (var handler = new HttpClientHandler { UseCookies = false }) using (var client = new HttpClient(handler) { BaseAddress = baseAddress }) { var message = new HttpRequestMessage(HttpMethod.Get, "/test"); message.Headers.Add("Cookie", "cookie1=value1; cookie2=value2"); var result = await client.SendAsync(message); result.EnsureSuccessStatusCode(); }