我想记录System.Net.Http.HttpClient
在我的应用程序中完成的所有HTTP请求。重要提示:我还需要记录在System.Net.Http.HttpClient
之上实现的第三方包完成的请求。这意味着我不能直接在HttpClient
实例上做一些技巧。
System.Diagnostics.Tracing.EventListener
和IObserver<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>();
}