HttpClient的检索所有头(HttpClient retrieve all headers)

2019-09-01 15:50发布

目前,我工作的API的包装。 如果我把一个坏的Consumer Key ,服务器将返回Status403 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-ErrorX-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);

Answer 1:

那么, HttpResponseMessage.Headers返回HttpResponseHeaders参考,所以你应该能够使用GetValues()

string error = response.Headers.GetValues("X-Error").FirstOrDefault();
string errorCode = response.Headers.GetValues("X-Error-Code").FirstOrDefault();


Answer 2:

由于问题的标题是“检索所有头”,我想问候将它添加一个答案。

HttpResponseMessage通过返回HttpClient方法有两个头属性:

  • HttpResponseMessage.HeadersHttpResponseHeaders与通用的响应头
  • HttpResponseMessage.Content.HeadersHttpContentHeaders与像具体内容头Content-Type

这两个对象实现IEnumerable<KeyValuePair<string, IEnumerable<string>> ,这样你就可以很容易地像这样将所有的标题:

var responseMessage = await httpClient.GetAsync(url);
var headers = responseMessage.Headers.Concat(responseMessage.Content.Headers);


Answer 3:

只是一个疑难杂症,我试图找到一个不存在的标头时发现的。 您应该使用TryGetValues,而不是因为GetValues方法在运行时会抛出一个异常,如果没有找到的头。 你会使用这样的代码:

IEnumerable<string> cookieHeader; 
response.Headers.TryGetValues("Set-Cookie", out cookieHeader);


Answer 4:

这对我的作品:

(String[])response.Headers.GetValues("X-Error"))[0]


文章来源: HttpClient retrieve all headers