0

IIS で実行されているローカル Web サイトに対して次の要求を行っています。

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
Date: Mon, 03 Jun 2013 22:34:25 GMT
ETag: "50c7472eb342ce1:0"
Server: Microsoft-IIS/8.0
X-Powered-By: ASP.NET

Fiddler を介して行われた同一の要求は、次の応答ヘッダーを生成します (違いを強調しました)。

HTTP/1.1 200 OK
Content-Type: text/html
Last-Modified: Fri, 26 Apr 2013 19:20:58 GMT
Accept-Ranges: bytes
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;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
}

これには 2 つの問題があります。

  • プロパティのHeaders名前が適切ではありません。実際にはSomeHeadersまたはである必要がありますAllHeadersExceptContentHeaders。(つまり、実際には、という名前のプロパティが表示された場合、それがすべてのヘッダーまたは一部のHeadersヘッダーを返すことを期待していますか? 私は、それらがこれに関する独自のフレームワーク設計ガイドラインに違反していると確信しています。)
  • MSDN ページでは、これがすべてのヘッダーのサブセットであり、開発者も検査する必要があるという事実については一切触れていませんContent.Headers
于 2013-06-06T07:55:28.853 に答える