Mesej Permintaan Log/Respons dalam HttpClient
Artikel ini menangani keperluan untuk permintaan log dan mesej respons apabila menggunakan HttpClient. Ia menumpukan pada pendekatan praktikal untuk mengelog kandungan JSON sebenar yang disiarkan melalui kaedah PostAsJsonAsync HttpClient.
Penyelesaian:
Untuk merekodkan kandungan JSON, kami menggunakan DelegatingHandler bernama LoggingHandler . Pemintasan berlaku sebelum permintaan mencapai HttpClientHandler, membolehkan akses kepada data JSON. Pemformat dalaman ObjectContent menghasilkan perwakilan JSON yang ditangkap oleh kaedah ReadAsStringAsync LoggingHandler.
Pelaksanaan kelas LoggingHandler adalah seperti berikut:
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; } }
LoggingHandler ini mesti dirantai dengan HttpClient:
HttpClient client = new HttpClient(new LoggingHandler(new HttpClientHandler())); HttpResponseMessage response = client.PostAsJsonAsync(baseAddress + "/api/values", "Hello, World!").Result;
Output yang terhasil menunjukkan pengelogan kedua-dua permintaan dan mesej respons, termasuk kandungan JSON yang disiarkan:
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!"
Teknik ini menyediakan mekanisme pengelogan terperinci untuk permintaan dan respons HttpClient, membantu dalam penyahpepijatan dan pemantauan komunikasi melalui HTTP.
Atas ialah kandungan terperinci Bagaimana untuk Log Permintaan dan Respons Kandungan JSON Menggunakan HttpClient?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!