Réglage de l'en-Tête Accept sans l'aide de MediaTypeWithQualityHeaderValue
Dans Asp.Net Web Api 2 quelle est la différence entre la création d'une HttpClient Accepter d'en-Tête suivant la méthode traditionnelle :
HttpClient client = HttpClientFactory.Create(handler);
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
et la méthode suivante :
var headers = new Dictionary<string, string>
{
{"Accept", "application/json"}};
headers.ForEach(h => client.DefaultRequestHeaders.Add(h.Key, h.Value));
Mise à jour 1:
En fonction de la réponse par @DarrenMiller dans le post suivant, Qu'est-ce que la surcharge de la création d'un nouveau HttpClient par appel dans un WebAPI client? il semble que la meilleure méthode est l'utilisation de DefaultRequestHeaders
de propriété, car il contient des propriétés qui sont destinés à plusieurs appels. Est-ce à dire si je l'ai mis par défaut de l'en-tête à l'aide d'un simple dictionnaire de mon HttpClient client
ne sera pas aussi efficace que celui qui utilise DefaultRequestHeaders
? En outre, j'ai vraiment cant comprendre comment les valeurs à l'intérieur de DefaultRequestHeaders
sera réutilisé? Disons que j'ai créer 20 HttpClient client
à l'aide de HttpClientFactory.Create
et à l'intérieur de chacun d'eux, j'ai mis DefaultRequestHeaders
de la propriété [Dois-je vraiment besoin de le faire parce que DefaultRequestHeaders était censé être réutilisé?!]. D'où vient cette réutilisation coup de pied dans et ne la définition de la DefaultRequestHeaders
à chaque fois que je créer un HttpClient client
résultat dans un certain genre de performance?
Accept
, et dans le second cas, vous êtes en train d'ajouter à un autre endroit.La meilleure chose à faire est d'utiliser quelque chose comme Fiddler (telerik.com/fiddler) pour observer ce qui est en fait envoyé dans la demande lorsque vous faites les deux méthodes lors de la Fiddler est en cours d'exécution. Il va enregistrer le trafic HTTP et vous permettent de regarder les différences.
OriginalL'auteur MHOOS | 2015-06-04
Vous devez vous connecter pour publier un commentaire.
La première partie de votre question: quelle Est la différence pour ajouter des en-têtes?
Méthode 1:
Méthode 2:
Méthode 1 vous donne de nice fortement typé valeurs avec la possibilité d'ajouter plusieurs accepter les types. Méthode 2 a une plus de "magie de la chaîne", qui pourrait être un lieu pour les fautes de frappe et il n'y a aucun moyen d'ajouter de multiples accepter types.
La partie 2 de votre question: Où est la performance et la valeur de réutilisation?
L'impact sur les performances de l'utilisation d'un nouveau HttpClient pour chaque demande dépend de votre cas d'utilisation. Obtenir un point de référence et de mesurer pour voir si elle a des questions. La performance sur le développeur est plus probable lorsque les gains seront. Considérons que chaque HttpClient vous utilisez, vous devez vous rappeler un tas de têtes à ajouter. Si vous oubliez d'ajouter un bon d'en-tête, les erreurs se produisent. Ainsi, vous pouvez utiliser DefaultRequestHeaders à les définir dans une usine.
Maintenant l'utiliser:
HttpClients devrait être de courte durée et toujours enveloppé dans une instruction d'utilisation. La réutilisation se produit lorsque plusieurs demandes sont faites en utilisant le même client.
Je suppose que "de courte durée" est subjective. Il n'y a jamais un fourre-tout de la solution. Comme je l'ai mentionné ci-dessus, l'individu en cas d'utilisation permettra de déterminer la meilleure solution. L'exécution de ce par le biais d'une boucle for, probablement pas une bonne idée. Garder un seul HttpClient en vie pour l'ensemble de l'utilisation d'une application native pendant des heures sur la fin, probablement pas une bonne idée. Il y aura toujours un compromis quelque part. Merci pour les commentaires.
OriginalL'auteur ManOVision