c# windows-runtime windows-store-apps httpclient apiary.io

c# - Agregar encabezados cuando se usa httpClient.GetAsync



windows-runtime windows-store-apps (5)

Cuando use GetAsync con el HttpClient, puede agregar los encabezados de autorización de la siguiente manera:

httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", "Your Oauth token");

Esto agrega el encabezado de autorización para la vida útil del HttpClient, por lo que es útil si accede a un sitio donde el encabezado de autorización no cambia.

Aquí hay una answer SO detallada

Estoy implementando una API hecha por otros colegas con Apiary.io, en un proyecto de aplicación de la tienda de Windows.

muestran este ejemplo de un método que tengo que implementar

var baseAddress = new Uri("https://private-a8014-xxxxxx.apiary-mock.com/"); using (var httpClient = new HttpClient{ BaseAddress = baseAddress }) { using(var response = await httpClient.GetAsync("user/list{?organizationId}")) { string responseData = await response.Content.ReadAsStringAsync(); } }

en este y algunos otros métodos, necesito tener un encabezado con un token que obtengo antes

Heres una imagen de cartero (extensión de cromo) con el encabezado que estoy hablando

¿Cómo agrego ese encabezado de autorización a la solicitud?


La respuesta aceptada funciona, pero puede complicarse cuando quería intentar agregar encabezados Aceptar. Esto es con lo que terminé. Me parece más simple, así que creo que me quedaré con eso en el futuro:

client.DefaultRequestHeaders.Add("Accept", "application/*+xml;version=5.1"); client.DefaultRequestHeaders.Add("Authorization", "Basic " + authstring);


Puede agregar cualquier encabezado que necesite al HttpClient .

Aquí hay un buen tutorial respecto.

Esto no solo hace referencia a solicitudes POST, también puede usarlo para solicitudes GET.


Siguiendo la respuesta de greenhoorn, puede usar "Extensiones" de esta manera:

public static class HttpClientExtensions { public static HttpClient AddTokenToHeader(this HttpClient cl, string token) { //int timeoutSec = 90; //cl.Timeout = new TimeSpan(0, 0, timeoutSec); string contentType = "application/json"; cl.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue(contentType)); cl.DefaultRequestHeaders.Add("Authorization", String.Format("Bearer {0}", token)); var userAgent = "d-fens HttpClient"; cl.DefaultRequestHeaders.Add("User-Agent", userAgent); return cl; } }

Y use:

string _tokenUpdated = "TOKEN"; HttpClient _client; _client.AddTokenToHeader(_tokenUpdated).GetAsync("/api/values")


Una respuesta posterior, pero porque nadie dio esta solución ...

Si no desea establecer el encabezado en la instancia HttpClient agregándolo a DefaultRequestHeaders , puede establecer encabezados por solicitud .

Pero estará obligado a utilizar el método SendAsync() .

Esta es la solución correcta si desea reutilizar el HttpClient , que es una buena práctica para

Úselo así:

using (var requestMessage = new HttpRequestMessage(HttpMethod.Get, "https://your.site.com")) { requestMessage.Headers.Authorization = new AuthenticationHeaderValue("Bearer", your_token); httpClient.SendAsync(requestMessage); }