Heim >Backend-Entwicklung >C++ >Wie protokolliere ich JSON-Inhalte für Anfragen und Antworten mit HttpClient?

Wie protokolliere ich JSON-Inhalte für Anfragen und Antworten mit HttpClient?

Susan Sarandon
Susan SarandonOriginal
2025-01-01 04:33:09898Durchsuche

How to Log Request and Response JSON Content Using HttpClient?

Anforderungs-/Antwortnachrichten in HttpClient protokollieren

In diesem Artikel geht es um die Notwendigkeit der Protokollierung von Anforderungs- und Antwortnachrichten bei der Verwendung von HttpClient. Es konzentriert sich auf den praktischen Ansatz der Protokollierung des tatsächlichen JSON-Inhalts, der über die PostAsJsonAsync-Methode von HttpClient gepostet wird.

Lösung:

Um den JSON-Inhalt aufzuzeichnen, verwenden wir einen DelegatingHandler namens LoggingHandler . Das Abfangen erfolgt, bevor die Anfrage den HttpClientHandler erreicht, wodurch der Zugriff auf die JSON-Daten ermöglicht wird. Der interne Formatierer von ObjectContent erzeugt die JSON-Darstellung, die von der ReadAsStringAsync-Methode des LoggingHandlers erfasst wird.

Die Implementierung der LoggingHandler-Klasse ist wie folgt:

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;
    }
}

Dieser LoggingHandler muss mit dem HttpClient verkettet werden:

HttpClient client = new HttpClient(new LoggingHandler(new HttpClientHandler()));
HttpResponseMessage response = client.PostAsJsonAsync(baseAddress + "/api/values", "Hello, World!").Result;

Die resultierende Ausgabe zeigt die Protokollierung sowohl der Anfrage als auch Antwortnachrichten, einschließlich des geposteten JSON-Inhalts:

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!"

Diese Technik bietet einen detaillierten Protokollierungsmechanismus für HttpClient-Anfragen und -Antworten und hilft beim Debuggen und Überwachen der Kommunikation über HTTP.

Das obige ist der detaillierte Inhalt vonWie protokolliere ich JSON-Inhalte für Anfragen und Antworten mit HttpClient?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn