Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Log Permintaan HTTP dan Membalas Mesej JSON menggunakan HttpClient?

Bagaimana untuk Log Permintaan HTTP dan Membalas Mesej JSON menggunakan HttpClient?

Patricia Arquette
Patricia Arquetteasal
2024-12-31 14:22:10386semak imbas

How to Log HTTP Request and Response JSON Messages using HttpClient?

Melog Permintaan HTTP dan Mesej Respons menggunakan HttpClient

Dalam situasi di mana anda perlu menangkap permintaan dan mesej respons semasa komunikasi HTTP menggunakan HttpClient, pembalakan menjadi penting. Pertimbangkan coretan kod berikut:

var response = await client.PostAsJsonAsync(url, entity);

if (response.IsSuccessStatusCode)
{
    return await response.Content.ReadAsAsync<T>();
}

Sekarang, mari kita terokai cara mendapatkan muatan JSON yang dihantar dalam objek 'entiti' tanpa mensirikannya secara manual.

Penyelesaian: Pengelogan Tersuai Pengendali

Untuk memintas dan log permintaan dan mesej respons, anda boleh membuat tersuai pengendali pembalakan yang melilit HttpClientHandler. Pengendali ini akan memintas permintaan sebelum HttpClientHandler memprosesnya. Contoh pelaksanaan boleh:

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

Dalam pengendali ini:

  • Console.WriteLine(request.Content.ReadAsStringAsync()) membaca kandungan permintaan, yang menyebabkan pemformat sirikan objek entiti ke dalam JSON.
  • Console.WriteLine(response.Content.ReadAsStringAsync()) melakukan perkara yang sama untuk kandungan respons.

Merantai Pengendali Pengelogan dengan HttpClient

Untuk menggunakan pengendali pembalakan, anda perlu merantainya kepada anda HttpClient:

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

Contoh Output

Output kod di atas akan kelihatan seperti ini:

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

Dengan menggunakan pendekatan ini, anda boleh log permintaan dan respons mesej JSON dengan berkesan semasa panggilan HTTP dibuat dengan HttpClient, memberikan pandangan berharga untuk penyahpepijatan dan tujuan penyelesaian masalah.

Atas ialah kandungan terperinci Bagaimana untuk Log Permintaan HTTP dan Membalas Mesej JSON menggunakan HttpClient?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn