Consignation des messages de requête/réponse HTTP avec HttpClient
Lorsque vous travaillez avec HttpClient, la journalisation des messages de requête et de réponse est cruciale pour le débogage et le dépannage. Cela permet aux développeurs d'inspecter les données réelles envoyées et reçues par le service.
Une méthode pour y parvenir consiste à utiliser un LoggingHandler personnalisé qui intercepte à la fois les messages de demande et de réponse. Ce gestionnaire peut être chaîné avec le HttpClientHandler sous-jacent pour observer le flux des messages.
Gestionnaire de journalisation :
public class LoggingHandler : DelegatingHandler { public LoggingHandler(HttpMessageHandler innerHandler) : base(innerHandler) { } protected override async Task<HttpResponseMessage> SendAsync( HttpRequestMessage request, CancellationToken cancellationToken) { // Log request details Console.WriteLine($"Request:"); Console.WriteLine(request.ToString()); if (request.Content != null) { Console.WriteLine(await request.Content.ReadAsStringAsync()); } Console.WriteLine(); // Send request to inner handler HttpResponseMessage response = await base.SendAsync(request, cancellationToken); // Log response details Console.WriteLine($"Response:"); Console.WriteLine(response.ToString()); if (response.Content != null) { Console.WriteLine(await response.Content.ReadAsStringAsync()); } Console.WriteLine(); return response; } }
Utilisation :
Pour utiliser LoggingHandler, chaînez-le avec HttpClientHandler comme suit :
HttpClient client = new HttpClient(new LoggingHandler(new HttpClientHandler())); HttpResponseMessage response = client.PostAsJsonAsync(baseAddress + "/api/values", "Hello, World!").Result;
Sortie :
L'exécution du code ci-dessus produit la sortie suivante :
Request: Method: POST, RequestUri: 'http://kirandesktop:9095/api/values', Version: 1.1, Content: System.Net.Http.ObjectContent`1[ [System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], Headers: { Content-Type: application/json; charset=utf-8 } "Hello, World!" Response: StatusCode: 200, ReasonPhrase: 'OK', Version: 1.1, Content: System.Net.Http.StreamContent, Headers: { Date: Fri, 20 Sep 2013 20:21:26 GMT Server: Microsoft-HTTPAPI/2.0 Content-Length: 15 Content-Type: application/json; charset=utf-8 } "Hello, World!"
En incorporant ce mécanisme de journalisation, les développeurs obtenez des informations en temps réel sur les requêtes et les réponses HTTP, permettant un débogage et une analyse efficaces des interactions de service.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!