对本地IIS 8.0的HttpClient请求不会在响应中生成预期的标头

时间:2013-06-03 22:50:11

标签: http http-headers .net-4.5 iis-8

我正在向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的事实)?

1 个答案:

答案 0 :(得分:1)

<强> TL; DR;

要访问所有响应标头,您需要同时阅读HttpResponseMessage.HeadersHttpResponseMessage.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属性未正确命名:它应该是SomeHeadersAllHeadersExceptContentHeaders。 (我的意思是,当你看到一个名为Headers的属性时,你是否希望它返回所有标题或一些标题?我很确定它们是违反了他们自己的框架设计指南。)
  • MSDN page在任何时候都没有提及这是所有标题的子集,开发人员也应该检查Content.Headers