在.net 8中使用HttpClientFactory时日志记录请求body和响应body

 

1、定义DelegatingHandler

复制代码
public class LoggingHandler : DelegatingHandler
{
    private readonly ILogger<LoggingHandler> _logger;

    public LoggingHandler(ILogger<LoggingHandler> logger)
    {
        _logger = logger;
    }

    protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
    {
        // 记录请求信息
        _logger.LogInformation("发送请求: {Method} {Uri}", request.Method, request.RequestUri);
        if (request.Content != null)
        {
            var requestBody = await request.Content.ReadAsStringAsync();
            _logger.LogInformation("请求体: {RequestBody}", requestBody);
        }

        // 调用基类方法发送请求
        var response = await base.SendAsync(request, cancellationToken);

        // 记录响应信息
        _logger.LogInformation("接收到响应: {StatusCode}", response.StatusCode);
        if (response.Content != null)
        {
            var responseBody = await response.Content.ReadAsStringAsync();
            _logger.LogInformation("响应体: {ResponseBody}", responseBody);
        }

        return response;
    }
}
复制代码

 

2、注入LoggingHandler 和配置使用LoggingHandler

var builder = WebApplication.CreateBuilder(args);

//xxxxxxx
 
builder.Services.AddTransient<LoggingHandler>();
builder.Services.AddHttpClient().ConfigureHttpClientDefaults(defaults=> defaults.AddHttpMessageHandler<LoggingHandler>());

 

 

然后通过注入IHttpClientFactory, 调用CreateClient方法创建HttpClient发起请求即可在日志中查看到请求的body和响应的body了

 

posted @   turingguo  阅读(144)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
点击右上角即可分享
微信分享提示