HTTP : Création d’instances HttpClient par les codes d’état entiers du journal IHttpClientFactory

Les instances HttpClient sont créées par les codes d’état HTTP du journal IHttpClientFactory en tant qu’entiers plutôt qu’avec des noms de code d’état.

Version introduite

5.0 Préversion 1

Ancien comportement

La journalisation utilise les descriptions textuelles des codes d’état HTTP. Examinez les messages de journal suivants :

Received HTTP response after 56.0044ms - OK
End processing HTTP request after 70.0862ms - OK

Nouveau comportement

La journalisation utilise les valeurs entières des codes d’état HTTP. Examinez les messages de journal suivants :

Received HTTP response after 56.0044ms - 200
End processing HTTP request after 70.0862ms - 200

Raison du changement

Le comportement d’origine de cette journalisation est incohérent avec d’autres parties d’ASP.NET Core qui ont toujours utilisé des valeurs entières. Cette incohérence rend les journaux difficiles à interroger avec des systèmes de journalisation structurés tels qu’Elasticsearch. Pour plus de contexte, consultez dotnet/extensions#1549.

Les valeurs entières se révèlent plus flexibles que le texte, car elles autorisent les requêtes sur des plages de valeurs.

Il a été envisagé d’ajouter une autre valeur de journal pour capturer le code d’état entier. Malheureusement, cela entraînerait une autre incohérence avec le reste d’ASP.NET Core. La journalisation HttpClient et la journalisation serveur/hébergement HTTP utilisent déjà le même nom de clé StatusCode.

La meilleure solution consiste à mettre à jour les requêtes de journalisation pour utiliser les valeurs entières des codes d’état. Elle peut rendre difficile l’écriture de requêtes pour plusieurs versions d’ASP.NET Core. L’utilisation d’entiers à cette fin est beaucoup plus flexible pour interroger les journaux.

Si vous devez forcer la compatibilité avec l’ancien comportement et utiliser des codes d’état textuels, remplacez la journalisation IHttpClientFactory par la vôtre :

  1. Copiez la version .NET Core 3.1 des classes suivantes dans votre projet :

  2. Renommez les classes de façon à éviter des conflits avec les types publics dans le package NuGet Microsoft.Extensions.Http.

  3. Remplacez l’implémentation intégrée de LoggingHttpMessageHandlerBuilderFilter par la vôtre dans la méthode Startup.ConfigureServices du projet. Par exemple :

    public void ConfigureServices(IServiceCollection services)
    {
        // Other service registrations go first. Code omitted for brevity.
    
        // Place the following after all AddHttpClient registrations.
        services.RemoveAll<IHttpMessageHandlerBuilderFilter>();
    
        services.AddSingleton<IHttpMessageHandlerBuilderFilter,
                              MyLoggingHttpMessageHandlerBuilderFilter>();
    }
    

API affectées

System.Net.Http.HttpClient