首页 > 其他分享 >在.net 8中使用HttpClientFactory时日志记录请求body和响应body

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

时间:2024-07-26 17:28:24浏览次数:6  
标签:body 请求 HttpClientFactory request response Content net logger

 

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了

 

标签:body,请求,HttpClientFactory,request,response,Content,net,logger
From: https://www.cnblogs.com/turingguo/p/18325874

相关文章

  • 【YOLOv8改进- Backbone主干】BoTNet:基于Transformer,结合自注意力机制和卷积神经网络
    YOLOv8目标检测创新改进与实战案例专栏专栏目录:YOLOv8有效改进系列及项目实战目录包含卷积,主干注意力,检测头等创新机制以及各种目标检测分割项目实战案例专栏链接:YOLOv8基础解析+创新改进+实战案例介绍摘要我们提出了BoTNet,这是一种概念上简单但功能强大的骨干......
  • mobilenet为什么不适合做int8量化
    MobileNet在进行INT8量化时遇到的挑战主要有以下几个原因:网络结构复杂性:MobileNet使用深度可分离卷积(DepthwiseSeparableConvolutions)来减少计算量和参数数量。这种卷积方式使得权重分布更加稀疏且多样化,可能在量化过程中失去一些细微的精度。激活函数和特征图范围......
  • 搭建.Net WebApi并配置Swagger(一)
    C#进阶之WebAPI(一)那么首先第一点:什么是WebAPI?首先我们了解一下.netframework的框架构成:   可以看到,WebAPI和mvc同属于B/S模板框架的一种,官方对于WebApi的定义是:WebAPI是一个框架,可以轻松构建HTTP服务,覆盖广泛的客户端,包括浏览器和移动设备,WebAPI是在.NetFramwo......
  • “‘NoneType’类型的对象没有 len()”错误
    下面的代码应该从连接到RaspberryPiPicoWH的电容式传感器连接遥测土壤湿度数据并将其发送到ThingsBoard云,但当我运行它时,它显示“‘NoneType’类型的对象没有len()”ThonnyIDE的shell中出现错误。main.pyfrommachineimportADC,Pinimportumqtt.robustas......
  • cad.net 图元做块后保留绘图次序
    今天水友在强有力提出一个问题,选中一部分对象,做成块后,绘图次序发生了变化,如何保留原来的绘图次序。这是一个十分有用的问题,我以前从未考虑过此问题,于是我研究了一下,将结果分享给大家 1.验证我先后在cad中创建了3条多段线(多段线设置宽度后可以很方便的看到绘图次序),这里命名为1......
  • 基于.NET开源、强大易用的短链生成及监控系统
    前言今天大姚给大家分享一个基于.NET开源(MITLicense)、免费、强大易用的短链生成及监控系统:SuperShortLink。项目介绍SuperShortLink是一个基于.NET开源(MITLicense)、免费、强大易用的短链生成及监控系统,包含了短URL的生成、短URL跳转长URL、短URL访问统计以及Web后台监控页面,......
  • OpenFeign报错:Caused by: java.lang.IllegalStateException: Method has too many Bod
    近两天在开发进行若依二开,openfeign需要一个微服务调用另一个微服务。等service层注入远程bean后,报错Causedby:java.lang.IllegalStateException:MethodhastoomanyBodyparameters:publicabstractvoidcom.shop.user.remote.RemoteUmsMemberAddressService.export(j......
  • Java NIO框架Netty教程(四)- ChannelBuffer
    在字符串消息收发中提到。ChannelBuffer是Netty中非常重要的概念。所有消息的收发都依赖于这个Buffer。我们通过Netty的官方的文档来了解一下,基于流的消息传递机制。Inastream-basedtransportsuchasTCP/IP,receiveddataisstoredintoasocketreceivebuffer.Unf......
  • Java NIO框架Netty教程(六)-Java NIO Selector模式
    全文详见个人独立博客:JavaNIO框架Netty教程(六)-JavaNIOSelector模式JavaNIO框架Netty教程(六)-JavaNIOSelector模式看到标题,您可能觉得,这跟Netty有什么关系呢?确实,如果你完全是使用Netty的,那么可能你可以完全不需要了解Selector。但是,不得不提的是,Netty底层关于NIO的实......
  • 如何将Python嵌入.Net?
    我尝试基于文档此处和此处使用pythonnet将Python嵌入到.Net中。这是我的代码Runtime.PythonDLL=@"D:\Dev\Console\.conda\python311.dll";PythonEngine.Initialize();dynamicsys=Py.Import("sys");Console.WriteLine("Pythonversion:&quo......