目前,我工作的API的包装。 如果我把一个坏的Consumer Key
,服务器将返回Status
为403 Forbidden
在头中。 它也将通过自定义页眉。 实际上,我怎么检索这些自定义页眉?
这是响应从服务器接收。
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
我需要检索X-Error
和X-Error-Code
。 目前,我使用HttpClient
类来处理请求。 如果我看的头在VS 2012工作室下快速查看回应,我能找到像这样
((System.Net.Http.Headers.HttpHeaders)(response.Headers)).headerStore["X-Error-Code"].ParsedValue
是否有任何其他方式做到这一点?
编辑: headerStore
不是直通代码访问,因为这是私人领域。 我只打通了快速监视窗口访问它。
这是我的请求片段:
var response = await _httpClient.PostAsync("/v3/oauth/request", content);
那么, HttpResponseMessage.Headers
返回HttpResponseHeaders
参考,所以你应该能够使用GetValues()
string error = response.Headers.GetValues("X-Error").FirstOrDefault();
string errorCode = response.Headers.GetValues("X-Error-Code").FirstOrDefault();
由于问题的标题是“检索所有头”,我想问候将它添加一个答案。
该HttpResponseMessage
通过返回HttpClient
方法有两个头属性:
-
HttpResponseMessage.Headers
是HttpResponseHeaders
与通用的响应头 -
HttpResponseMessage.Content.Headers
是HttpContentHeaders
与像具体内容头Content-Type
这两个对象实现IEnumerable<KeyValuePair<string, IEnumerable<string>>
,这样你就可以很容易地像这样将所有的标题:
var responseMessage = await httpClient.GetAsync(url);
var headers = responseMessage.Headers.Concat(responseMessage.Content.Headers);
只是一个疑难杂症,我试图找到一个不存在的标头时发现的。 您应该使用TryGetValues,而不是因为GetValues方法在运行时会抛出一个异常,如果没有找到的头。 你会使用这样的代码:
IEnumerable<string> cookieHeader;
response.Headers.TryGetValues("Set-Cookie", out cookieHeader);
这对我的作品:
(String[])response.Headers.GetValues("X-Error"))[0]