web-dev-qa-db-fra.com

Ajout d'en-têtes lors de l'utilisation de httpClient.GetAsync

Je mets en œuvre une api faite par d'autres collègues avec Apiary.io, dans un projet d'application Windows Store.

ils montrent cet exemple d'une méthode que je dois mettre en œuvre

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();

 }
}

dans cela et quelques autres méthodes je dois avoir un en-tête avec un jeton que je reçois avant

voici une image de postman (chrome extension) avec l'en-tête im qui parle de enter image description here

comment puis-je ajouter cet en-tête d'autorisation à la demande?

102
Ric

Lorsque vous utilisez GetAsync avec HttpClient, vous pouvez ajouter les en-têtes d'autorisation de la manière suivante:

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

Cela ajoute l’en-tête d’autorisation pour la durée de vie du HttpClient. Il est donc utile si vous visitez un site où l’en-tête d’autorisation ne change pas.

Voici un détaillé SO réponse

121
kmcnamee

Une réponse ultérieure, mais parce que personne n'a donné cette solution ...

Si vous ne souhaitez pas définir l'en-tête sur l'instance HttpClient en l'ajoutant à DefaultRequestHeaders, , vous pouvez définir des en-têtes par requête .

Mais vous serez obligé d'utiliser la méthode SendAsync().

C’est la bonne solution si vous souhaitez réutiliser le HttpClient - ce qui est une bonne pratique pour

Utilisez-le comme ceci:

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

La réponse acceptée fonctionne mais peut être compliquée lorsque je voulais ajouter des en-têtes Accepter. C'est ce que j'ai fini avec. Cela me semble plus simple alors je pense que je vais m'en tenir à l'avenir:

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

Vous pouvez ajouter tous les en-têtes dont vous avez besoin à la variable HttpClient.

Voici un joli tutoriel à ce sujet.

Cela ne fait pas seulement référence aux requêtes POST, vous pouvez également l'utiliser pour les requêtes GET.

9
greenhoorn

Après la réponse du greenhoorn, vous pouvez utiliser "Extensions" comme ceci:

  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;
        }
    }

Et utilise:

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