Explorer les clients HTTP dans .NET Core

Effectué

Le protocole HTTP est utilisé pour demander des ressources à un serveur web. De nombreux types de ressources sont disponibles sur le web et HTTP définit un ensemble de méthodes de demande pour accéder à ces ressources. Dans .NET Core, ces requêtes sont effectuées via une instance de HttpClient.

Il existe deux options pour implémenter HttpClient dans votre application et il est recommandé de choisir l’implémentation en fonction des besoins de gestion de la durée de vie des clients :

  • Pour les clients de longue durée : créez un static ou une instance singleton à l’aide de la classe HttpClient et définissez PooledConnectionLifetime
  • Pour les clients de courte durée : utilisez les clients créés par IHttpClientFactory

Implémenter avec la classe HttpClient

La classe System.Net.Http.HttpClient envoie des requêtes HTTP et reçoit des réponses HTTP d’une ressource identifiée par un URI. Une instance HttpClient est une collection de paramètres appliqués à toutes les requêtes exécutées par cette instance, et chaque instance utilise son propre pool de connexions, qui isole ses requêtes des autres. À partir de .NET Core 2.1, la classe SocketsHttpHandler fournit l’implémentation, ce qui rend le comportement cohérent sur toutes les plateformes.

HttpClient résout uniquement les entrées DNS lors de la création d’une connexion. Il ne suit pas les durées de vie (TTL) spécifiées par le serveur DNS. Si les entrées DNS changent régulièrement, le client n’est pas tenu au courant. Pour résoudre ce problème, vous pouvez limiter la durée de vie de la connexion en définissant la propriété PooledConnectionLifetime afin que la recherche DNS soit répétée lorsque la connexion est remplacée.

Dans l’exemple suivant, HttpClient est configuré pour réutiliser les connexions pendant 15 minutes. Une fois que le TimeSpan spécifié par PooledConnectionLifetime est écoulé, la connexion est fermée et une nouvelle connexion est créée.

var handler = new SocketsHttpHandler
{
    PooledConnectionLifetime = TimeSpan.FromMinutes(15) // Recreate every 15 minutes
};
var sharedClient = new HttpClient(handler);

Implémenter avec IHttpClientFactory

IHttpClientFactory sert d’abstraction de fabrique qui peut créer des instances HttpClient avec des configurations personnalisées. IHttpClientFactory a été introduit dans .NET Core 2.1. Les charges de travail .NET courantes basées sur HTTP peuvent facilement tirer parti des intergiciels.

Lorsque vous appelez l’une des méthodes d’extension AddHttpClient, vous ajoutez le IHttpClientFactory et les services associés à IServiceCollection. Le type IHttpClientFactory présente les avantages suivants :

  • Il expose la classe HttpClient comme type prêt à l’injection de dépendances.
  • Fournit un emplacement central pour le nommage et la configuration d’instance de HttpClient logiques.
  • Codifie le concept d’intergiciel (middleware) sortant via la délégation de gestionnaires dans HttpClient.
  • Fournit des méthodes d’extension pour les intergiciels basés sur Polly afin de tirer parti des gestionnaires de délégation dans HttpClient.
  • Il gère la mise en cache et la durée de vie des instances HttpClientHandler sous-jacentes. La gestion automatique évite les problèmes courants liés au système DNS (Domain Name System) qui se produisent lors de la gestion manuelle des durées de vie HttpClient.
  • Il ajoute une expérience de journalisation configurable pour toutes les requêtes envoyées via les clients créés par la fabrique.

Vous devez laisser HttpClientFactory et l’infrastructure gérer les durées de vie et l’instanciation des instances HttpClient. La gestion de la durée de vie permet d’éviter les problèmes courants tels que les problèmes de DNS (Domain Name System) qui peuvent se produire lors de la gestion manuelle des durées de vie HttpClient.

Vous pouvez utiliser IHttpClientFactory dans une application de plusieurs façons :

La meilleure approche dépend des exigences de l’application.