HttpClient: de manière Conditionnelle AcceptEncoding de compression au moment de l'exécution

Nous essayons de mettre en œuvre déterminé par l'utilisateur (sur un écran des paramètres) en option compression gzip dans nos client qui utilise HttpClient, de sorte que nous pouvons nous connecter et de comparer les performances dans un certain nombre de différents appels sur une période de temps. Notre première tentative a été de simplement conditionnellement ajouter l'en-tête comme suit:

HttpRequestMessage request = new HttpRequestMessage(Method, Uri);
if (AcceptGzipEncoding)
{
     _client.DefaultRequestHeaders.AcceptEncoding.Add(new System.Net.Http.Headers.StringWithQualityHeaderValue("gzip"));
}

//Send to the server
result = await _client.SendAsync(request);

//Read the content of the result response from the server
content = await result.Content.ReadAsStringAsync();

Cela a créé la bonne demande, mais le format de la réponse n'a pas été décompressé sur le retour, résultant dans brouillé la réponse. J'ai trouvé que nous avons dû inclure le HttpClientHandler lors de la construction de la HttpClient:

HttpClient _client = new HttpClient(new HttpClientHandler
    { 
        AutomaticDecompression = DecompressionMethods.GZip
    });

Tout cela fonctionne bien, mais nous aimerions changer si le client envoie la Accept-Encoding: gzip en-tête au moment de l'exécution, et il ne semble pas être un moyen d'accéder ou de modifier le HttpClientHandler après qu'il est passé à la HttpClient constructeur. En outre, de modifier les en-têtes de la HttpRequestMessage objet n'a aucun effet sur les en-têtes de la requête si ils sont définis par la HttpClientHandler.

Est-il possible de faire cela sans avoir à recréer le HttpClient chaque fois que cela change?

Edit: j'ai aussi essayé de modifier une référence à la HttpClientHandler de changer AutomaticDecompression au moment de l'exécution, mais que de lancer cette exception:

Cette instance a déjà commencé, en une ou plusieurs demandes. Les propriétés ne peuvent être modifiés avant l'envoi de la première demande.

Juste curieux, maintenant que vous avez vu comment pratique décompression automatique est, pourquoi pas recréer le client chaque fois que des modifications de paramètre? C'est exactement ce que j'avais à faire ici, sauf si il ya une très bonne raison de ne pas.
C'est une très bonne question. C'est quelque chose que nous envisageons, mais il faudra un peu de restructuration, je pense, parce que la même HttpClient est attaché dans un certain nombre de domaines. C'est un de taille moyenne d'application de l'héritage des développeurs, donc nous avons juste à gérer les changements avec soin. Nous allons être à la recherche à elle de cette semaine. Merci pour les commentaires et de l'aide.

OriginalL'auteur pcdev | 2015-02-26