Actuellement, je travaille sur le wrapper de l’API. Si j’envoie une mauvaise Consumer Key
, le serveur renverra le Status
403 Forbidden
dans l’en-tête. Il passera également des en-têtes personnalisés. Comment puis-je récupérer ces en-têtes personnalisés?
C’est la réponse reçue du serveur.
Cache-Control: private Date: Wed, 01 May 2013 14:36:17 GMT P3P: policyref="/w3c/p3p.xml", CP="ALL CURa ADMa DEVa OUR IND UNI COM NAV INT STA PRE" Server: Apache/2.2.23 (Amazon) Status: 403 Forbidden X-Error: Invalid consumer key. X-Error-Code: 152 X-Powered-By: PHP/5.3.20 Connection: keep-alive
J’ai besoin de récupérer les X-Error-Code
X-Error
et X-Error-Code
. Actuellement, HttpClient
classe HttpClient
pour traiter la demande. Si je regarde les en-têtes répondre sous Quick Watch dans VS Studio 2012, je pourrais le trouver comme ceci
((System.Net.Http.Headers.HttpHeaders)(response.Headers)).headerStore["X-Error-Code"].ParsedValue
Y a-t-un autre moyen de faire ça?
Edit: headerStore
n’est pas accessible via le code car il s’agit d’un champ privé. Je n’y accède que par la fenêtre de surveillance rapide.
Voici mon extrait de code pour la demande:
var response = await _httpClient.PostAsync("/v3/oauth/request", content);
HttpResponseMessage.Headers
renvoie une référence HttpResponseHeaders
, vous devriez donc pouvoir utiliser GetValues()
ssortingng error = response.Headers.GetValues("X-Error").FirstOrDefault(); ssortingng errorCode = response.Headers.GetValues("X-Error-Code").FirstOrDefault();
Puisque le titre de la question est “Récupérer tous les en-têtes”, je voulais append une réponse à ce sujet.
HttpResponseMessage
renvoyé par les méthodes HttpClient
a deux propriétés d’en-tête:
HttpResponseMessage.Headers
est un HttpResponseHeaders
avec des en-têtes de réponse génériques. HttpResponseMessage.Content.Headers
est un HttpContentHeaders
avec des en-têtes spécifiques au Content-Type
tels que Content-Type
Les deux objects implémentent IEnumerable
, afin que vous puissiez facilement combiner tous les en-têtes avec quelque chose comme:
var responseMessage = await httpClient.GetAsync(url); var headers = responseMessage.Headers.Concat(responseMessage.Content.Headers);
Juste un piège que j’ai trouvé en essayant de trouver un en-tête qui n’existait pas. Vous devez utiliser TryGetValues au lieu de GetValues car au moment de l’exécution, une exception sera levée si l’en-tête est introuvable. Vous utiliseriez quelque chose comme ce code:
IEnumerable cookieHeader; response.Headers.TryGetValues("Set-Cookie", out cookieHeader);
Cela fonctionne pour moi:
(Ssortingng[])response.Headers.GetValues("X-Error"))[0]