HttpClient を使用した HTTP リクエストおよび応答メッセージのログ記録
HttpClient を使用した HTTP 通信中にリクエストおよび応答メッセージをキャプチャする必要がある状況では、ログ記録が不可欠になります。次のコード スニペットを考えてみましょう:
var response = await client.PostAsJsonAsync(url, entity); if (response.IsSuccessStatusCode) { return await response.Content.ReadAsAsync<T>(); }
次に、手動でシリアル化せずに、'entity' オブジェクト内で送信された JSON ペイロードを取得する方法を見てみましょう。
解決策: カスタム ログHandler
リクエストとレスポンスのメッセージをインターセプトしてログに記録するには、次のようなカスタム ロギング ハンドラーを作成できます。 HttpClientHandler をラップします。このハンドラーは、HttpClientHandler がリクエストを処理する前にリクエストをインターセプトします。実装例は次のとおりです。
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; } }
このハンドラー内:
HttpClient とのログ ハンドラーのチェーン
ロギング ハンドラーを使用するには、ロギング ハンドラーをHttpClient:
HttpClient client = new HttpClient(new LoggingHandler(new HttpClientHandler())); HttpResponseMessage response = client.PostAsJsonAsync(baseAddress + "/api/values", "Hello, World!").Result;
出力例
上記のコードの出力は次のようになります:
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!"
このアプローチを利用すると、 HttpClient で行われた HTTP 呼び出し中にリクエストとレスポンスの JSON メッセージを効果的にログに記録できるため、デバッグに貴重な洞察が得られます。およびトラブルシューティングの目的。
以上がHttpClient を使用して HTTP リクエストとレスポンスの JSON メッセージを記録するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。