Protokollieren von HTTP-Anforderungs-/Antwortnachrichten mit HttpClient
Bei der Arbeit mit HttpClient ist die Protokollierung von Anforderungs- und Antwortnachrichten für das Debuggen und die Fehlerbehebung von entscheidender Bedeutung. Dadurch können Entwickler die tatsächlich vom Dienst gesendeten und empfangenen Daten überprüfen.
Eine Methode, dies zu erreichen, ist die Verwendung eines benutzerdefinierten LoggingHandlers, der sowohl Anforderungs- als auch Antwortnachrichten abfängt. Dieser Handler kann mit dem zugrunde liegenden HttpClientHandler verkettet werden, um den Nachrichtenfluss zu beobachten.
Protokollierungshandler:
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; } }
Verwendung:
Um den LoggingHandler zu verwenden, verketten Sie ihn mit dem HttpClientHandler as folgt:
HttpClient client = new HttpClient(new LoggingHandler(new HttpClientHandler())); HttpResponseMessage response = client.PostAsJsonAsync(baseAddress + "/api/values", "Hello, World!").Result;
Ausgabe:
Die Ausführung des obigen Codes erzeugt die folgende Ausgabe:
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!"
Durch die Integration dieses Protokollierungsmechanismus können Entwickler Erhalten Sie Echtzeit-Einblicke in die HTTP-Anfragen und -Antworten und ermöglichen Sie so ein effizientes Debugging und eine Analyse der Service-Interaktionen.
Das obige ist der detaillierte Inhalt vonWie protokolliere ich HTTP-Anforderungs-/Antwortnachrichten mit HttpClient in C#?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!