2017-06-05 24 views
2

HttpClientを使用してServer2Server呼び出しを行っているコードがあります。ここで私はrequestオブジェクトが適切なドメインに適切に作成されていることを確認した要求HttpClientがドメインの変更要求を変更しています

private void AsyncCallUrl(Uri url, NameValueCollection headers) 
{ 
    object result1 = null; 
    var handler = new HttpClientHandler() { AllowAutoRedirect = false }; 
    using (HttpClient client = new HttpClient(handler)) 
    { 
     var request = GetRequest(url, headers); 
     using (HttpResponseMessage response = client.SendAsync(request).Result) // when this line is executed the request object's domain is changed to something else 
     { 
      using (HttpContent content = response.Content) 
      { 
       result1 = content.ReadAsStringAsync().Result; 
      } 
     } 
    } 

を作るために要求

private HttpRequestMessage GetRequest(Uri uri, NameValueCollection headers) 
    { 
     var method = HttpMethod.Get; 
     var request = new HttpRequestMessage(method, uri); 
     foreach (string v in headers) 
     { 
      var success = request.Headers.TryAddWithoutValidation(v, headers[v]); 

      if (!success) 
      { 
       // log something (no logs are appearing) 
      } 
     } 
     return request; 
    } 

コードを作るためにいくつかの簡単なコード

コードです。また、ネットワークトラフィックが間違ったドメインに移動していることを確認しました。requestオブジェクトでも新しい不良ドメインが表示されます。なぜ私はこれが起こっているのか分からない。私はGetAsyncの代わりSendAsyncを使用する場合は、ドメインの変更が起こらないことに注意してください注意点として:私もAllowAutoRedirect

falseにメモを設定しました。しかし、これはヘッダーを追加するための理想的な解決策ではありません.に追加する必要があります。このコードはIISサーバー上に存在し、すべての要求に対して新しいクライアントを作成したくありません。

+0

ドメインとは何ですか?また、DNSエントリ/サーバーなどを制御していますか? –

+0

元のドメインは、私の会社が着信トラフィックを受け入れるために使用するサーバーです(prod.company.comと呼ぶことができます)。ただし、新しい悪いドメインは(dev.anothercompany.com)のようなものです。私たちを買った。おそらくいくつかのIISの設定があるようですか?私はドメインの細目が重要ではなく、変更されているということだけを考えています – sedavidw

+2

'NameValueCollection headers'コレクションに' Host'のエントリが含まれていますか? – spender

答えて

1

So SendAsyncであり、要求のHostヘッダーの値はuriパラメーターによって決定されますが、ヘッダーを要求のHeadersプロパティで上書きすることは可能です。

あなたが盲目的にリクエストのヘッダーに挿入しているNameValueCollection headersには、Hostのエントリが含まれており、Uriで提供したものとは異なる可能性があります。 (例えば)あなたはHttpWebRequestのDNSのパフォーマンス(Windows上のHttpClientのビジネス終わり)がサブ標準であることを発見した場合


は余談として、この動作は、便利です。私はホスト名の代わりにIPアドレスを使用するようにUriを書き直し、その後、発信要求のHostヘッダーを設定して、サードパーティのライブラリを使用してホストのIPを検索して.Net/Windows DNSをバイパスしました。元のホスト名

関連する問題