我正在向IIS中运行的本地网站发出以下请求
var httpRequestMessage = new HttpRequestMessage();
httpRequestMessage.RequestUri = new Uri("http://localhost:8081/");
httpRequestMessage.Method = HttpMethod.Get;
var response = new HttpClient().SendAsync(httpRequestMessage).Result;
这会生成以下响应标头:
HTTP / 1.1 200 OK
Accept-Ranges:bytes
日期:2013年6月3日星期一22:34:25 GMT
ETag:“50c7472eb342ce1:0”
服务器:Microsoft-IIS / 8.0
X-Powered-By:ASP.NET
通过Fiddler提出的相同请求会产生以下响应标头(我突出了差异):
HTTP / 1.1 200 OK
内容类型:text / html
最后修改时间:2013年4月26日星期五19:20:58 GMT
Accept-Ranges:bytes
ETag:“50c7472eb342ce1:0”
服务器:Microsoft-IIS / 8.0
X-Powered-By:ASP.NET
日期:2013年6月3日星期一22:29:34 GMT
内容长度:10
为什么响应标题有差异?
我是否正确使用HttpClient(除了我同步调用Send的事实)?
答案 0 :(得分:1)
<强> TL; DR; 强>
要访问所有响应标头,您需要同时阅读HttpResponseMessage.Headers
和HttpResponseMessage.Content.Headers
属性。
长(呃)回答:
这基本上是:
var response = new HttpClient().GetAsync("http://uri/").Result;
var allHeaders = response.Headers.Union(response.Content.Headers);
foreach (var header in allHeaders)
{
// do stuff
}
我看到两个问题:
Headers
属性未正确命名:它应该是SomeHeaders
或AllHeadersExceptContentHeaders
。 (我的意思是,当你看到一个名为Headers
的属性时,你是否希望它返回所有标题或一些标题?我很确定它们是违反了他们自己的框架设计指南。)Content.Headers
。