. net HTTP POST请求观察者



我想记录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的,所以我不能在应用程序外查看它们的内容。

实现这一目标的一种方法是使用中间件。

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>();
}

相关内容

  • 没有找到相关文章

最新更新