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