Partager via


HTTP : les instances HttpClient créées par IHttpClientFactory enregistrent des codes de statut entiers.

Les instances HttpClient créées par IHttpClientFactory journalisent les codes d'état HTTP sous forme d'entiers plutôt qu'avec des noms de codes d'état.

Version introduite

5.0 Préversion 1

Ancien comportement

La journalisation utilise les descriptions textuelles des codes d’état HTTP. Tenez compte des 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. Tenez compte des messages de journal suivants :

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

Raison de la modification

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

L’utilisation de valeurs entières est plus flexible que le texte, car elle autorise les requêtes sur des plages de valeurs.

L’ajout d’une autre valeur de journal pour capturer le code d’état entier a été pris en compte. Malheureusement, cela introduireait une autre incohérence avec le reste de ASP.NET Core. La journalisation HttpClient et la journalisation du serveur HTTP/hébergement utilisent déjà le même StatusCode nom de clé.

La meilleure option consiste à mettre à jour les requêtes de journalisation pour utiliser les valeurs entières des codes d’état. Cette option peut entraîner des difficultés lors de l’écriture de requêtes sur plusieurs versions ASP.NET Core. Toutefois, l’utilisation d’entiers à cet effet est beaucoup plus flexible pour consulter les fichiers de log.

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

  1. Copiez les versions .NET Core 3.1 des classes suivantes dans votre projet :

  2. Renommez les classes pour éviter les conflits avec les types publics dans le package NuGet Microsoft.Extensions.Http .

  3. Remplacez l’implémentation intégrée de LoggingHttpMessageHandlerBuilderFilter par votre propre méthode 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