2017-12-07 8 views
2

HttpClient APIを使用して、私がコントロールできないサードパーティサービスへのWebサービスリクエストを作成するアプリケーションに取り組んでいます。このサービスは、HTTP仕様に従って無効な値を含むETag HTTPヘッダーを持つ要求に応答しているようです(値は引用符で囲まれていません)。これにより、HttpClientは、System.FormatExceptionで失敗します。応答で無効なETagヘッダーを無視するようにHttpClientを設定できますか?

この場合、ETagヘッダーには興味がなく、無効な値を無視したいと考えています。 HttpClientを使用してこれを行うことはできますか?

私は、この特定のユースケースはHttpClientを使用しているときずっと簡単でSOCKSプロキシを使用するように私を必要とするのでWebClientまたはWebRequestHttpClient APIを使用することを好むだろう。

+2

どうかの委任ハンドラを作成し、その中にそのヘッダを削除しますか? – Evk

答えて

2

これを試してみてください:

class Example 
{ 
    static void Main() 
    { 
     var client = HttpClientFactory.Create(new Handler()); 
     client.BaseAddress = new Uri("http://www.example.local"); 
     var r = client.GetAsync("").Result; 
     Console.WriteLine(r.StatusCode); 
     Console.WriteLine(r.Headers.ETag); 
    } 
} 

class Handler : DelegatingHandler 
{ 
    protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) 
    { 
     var headerName = "ETag"; 
     var r = await base.SendAsync(request, cancellationToken); 
     var header = r.Headers.FirstOrDefault(x => x.Key == headerName); 
     var updatedValue = header.Value.Select(x => x.StartsWith("\"") ? x : "\"" + x + "\"").ToList(); 
     r.Headers.Remove(headerName); 
     r.Headers.Add(headerName, updatedValue); 
     return r; 
    } 
} 

マイレスポンスヘッダ:

HTTP/1.1 200 OK

日:金、2013年1月25日16時49分29秒GMT

FiddlerTemplate:True

コンテンツの長さ:310

のContent-Type:画像/ gif形式

のETag:rtt123

+0

残念ながら、これは動作しません。 delegatingハンドラが実行されても、 'base.SendAsync()'の呼び出しは以前と同じ 'FormatException'で失敗します。 –

関連する問題