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
.
Action recommandée
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 :
Copiez la version .NET Core 3.1 des classes suivantes dans votre projet :
Renommez les classes de façon à éviter des conflits avec les types publics dans le package NuGet Microsoft.Extensions.Http.
Remplacez l’implémentation intégrée de
LoggingHttpMessageHandlerBuilderFilter
par la vôtre dans la méthodeStartup.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
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour