.NET HTTP POST请求观察器

z9smfwbn  于 2022-12-01  发布在  .NET
关注(0)|答案(1)|浏览(178)

我想在我的应用程序中记录所有由System.Net.Http.HttpClient完成的HTTP请求。重要提示:我还需要记录在System.Net.Http.HttpClient上实现的第三方包所做的请求,这意味着我不能直接在HttpClient示例上做一些技巧。
到目前为止,我找到了两种方法:System.Diagnostics.Tracing.EventListenerIObserver<DiagnosticListener> / IObserver<KeyValuePair<string, object>>。第一个提供了较少的信息,如模式、HTTP版本、URL和查询参数。第二个提供了更多的信息,包括HTTP头。但是,它们都不能观察POST请求主体,在我的情况下,这是我需要的主要部分。
我认为这是因为POST主体不是你可以一次捕获的东西-主体可以非常大,在引擎盖下它通常是以流的方式实现的。所以这样的观察者也应该以某种流的方式观察。
可能吗PS:应用程序顶部的HTTP代理不是一个选项-大多数请求都是HTTPS,所以我不能在应用程序之外查看它们的内容。

lxkprmvk

lxkprmvk1#

实现这一点的一种方式可以是使用中间件。

public class DiagnosticsMiddleware
     {
        private readonly RequestDelegate _next;
        private readonly ILogger<DiagnosticsMiddleware> _logger;
      
        public DiagnosticsMiddleware(RequestDelegate next, 
                                 ILogger<DiagnosticsMiddleware> logger)
       {
          _next = next;
          _logger = logger;
       }

        public async Task Invoke(HttpContext context)
        {
         // YOUR CUSTOM LOGIC HERE, if any.
        }
    }

并在启动中注册,如下所示

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
  {
    app.UseMiddleware<DiagnosticsMiddleware>();
  }

相关问题