0

我正在向在 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
接受范围:字节
日期:星期一,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
接受范围:字节
ETag:“50c7472eb342ce1:0”
服务器:Microsoft-IIS/8.0
X-Powered-作者:ASP.NET
日期:2013 年 6 月 3 日星期一 22:29:34 GMT
内容长度:10

为什么响应标头有所不同?
我是否正确使用了 HttpClient(除了我正在同步调用 Send 的事实)?

4

1 回答 1

1

TL;博士;

要访问所有响应标头,您需要同时读取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属性的名称不恰当:它实际上应该是SomeHeadersor AllHeadersExceptContentHeaders。(我的意思是,真的,当您看到一个名为 的属性时Headers,您是否希望它返回所有标头或某些标头?我很确定它们违反了他们自己的框架设计指南。)
  • MSDN 页面在任何时候都没有提到这是所有标头的子集,开发人员也应该检查这一事实Content.Headers
于 2013-06-06T07:55:28.853 回答