Consignation des messages de demande/réponse dans HttpClient
Cet article répond à la nécessité de consigner les messages de demande et de réponse lors de l'utilisation de HttpClient. Il se concentre sur l'approche pratique de la journalisation du contenu JSON réel publié via la méthode PostAsJsonAsync de HttpClient.
Solution :
Pour enregistrer le contenu JSON, nous employons un DelegatingHandler nommé LoggingHandler. . L'interception a lieu avant que la requête n'atteigne le HttpClientHandler, permettant l'accès aux données JSON. Le formateur interne d'ObjectContent produit la représentation JSON capturée par la méthode ReadAsStringAsync de LoggingHandler.
L'implémentation de la classe LoggingHandler est la suivante :
public class LoggingHandler : DelegatingHandler { public LoggingHandler(HttpMessageHandler innerHandler) : base(innerHandler) { } protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) { Console.WriteLine("Request:"); Console.WriteLine(request.ToString()); if (request.Content != null) { Console.WriteLine(await request.Content.ReadAsStringAsync()); } Console.WriteLine(); HttpResponseMessage response = await base.SendAsync(request, cancellationToken); Console.WriteLine("Response:"); Console.WriteLine(response.ToString()); if (response.Content != null) { Console.WriteLine(await response.Content.ReadAsStringAsync()); } Console.WriteLine(); return response; } }
Ce LoggingHandler doit être chaîné avec le HttpClient :
HttpClient client = new HttpClient(new LoggingHandler(new HttpClientHandler())); HttpResponseMessage response = client.PostAsJsonAsync(baseAddress + "/api/values", "Hello, World!").Result;
Le résultat résultant démontre la journalisation de la demande et de la réponse messages, y compris le contenu JSON publié :
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!"
Cette technique fournit un mécanisme de journalisation détaillé pour les requêtes et les réponses HttpClient, facilitant le débogage et la surveillance de la communication sur HTTP.
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!