System.Net.Httpのリクエストやレスポンスをロギングする

SwiftのURLSession使って自前でHttpClient書いてたときは、リクエストパラメタとかいろいろをデバッグ時にログ出力してくれる便利なやつを自作していたんですが、.NETのHttpClientまあそのまま使うので、ロギングどうしようと思ってたらちゃんと用意してくれている。とても良い。

using System.Net.Http;

namespace Your.Name.Space
{
    public class HttpDelegatingHandler : DelegatingHandler
    {
        readonly ILogger logger;

        public HttpDelegatingHandler(HttpClientHandler innerHandler, ILogger logger) : base(innerHandler)
        {
            this.logger = logger;
        }

        protected async override System.Threading.Tasks.Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, System.Threading.CancellationToken cancellationToken)
        {
            logger.Debug(request);
            return await base.SendAsync(request, cancellationToken);
        }
    }
}

これを使ってリクエストを送ると例えば以下のようなログ出力が得られる

[DEBUG] Method: GET, RequestUri: 'https://example.com', Version: 1.1, Content: <null>, Headers: { Accept: application/json } (HttpDelegatingHandler.cs:16)

便利

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です