Currently, I am working on API wrapper. If I send a bad Consumer Key
, the server will return Status
as 403 Forbidden
in the header. It will also pass custom headers. How do I actually retrieve these custom headers?
This is the response receive from the server.
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
I need to retrieve the X-Error
and X-Error-Code
. Currently, I am using HttpClient
class to process the request. If I watch the headers respond under Quick Watch in VS Studio 2012, I could find it like this
((System.Net.Http.Headers.HttpHeaders)(response.Headers)).headerStore["X-Error-Code"].ParsedValue
Is there any other way to do this?
Edit:
headerStore
is not accessible thru code as this is private field. I only get access to it through the Quick Watch window.
This is my snippet for the request:
var response = await _httpClient.PostAsync("/v3/oauth/request", content);
Well,
HttpResponseMessage.Headers
returns anHttpResponseHeaders
reference, so you should be able to useGetValues()
A bit bulky, but simple to understand..
Since the title of the question is "retrieve all headers", I wanted to add an answer in regards to that.
The
HttpResponseMessage
returned byHttpClient
methods has two header properties:HttpResponseMessage.Headers
is anHttpResponseHeaders
with generic response headersHttpResponseMessage.Content.Headers
is anHttpContentHeaders
with content-specific headers likeContent-Type
Both objects implement
IEnumerable<KeyValuePair<string, IEnumerable<string>>
, so you can easily combine all the headers with something like this:This works for me:
Just a gotcha that I found when attempting to find a header that didn't exist. You should use TryGetValues instead of GetValues because at runtime it will throw an exception if the header is not found. You would use something like this code: