利用 ASP.NET Core 中的 HTTP 日志中间件灵活轻松地记录请求和响应信息。
在 ASP.NET Core 中使用 Web 应用程序时,您可能经常想要记录 HTTP 请求和响应。ASP.NET Core 中包含的 HTTP 日志记录中间件允许您记录请求和响应数据,包括标头、正文和通用属性。本文讨论了 HTTP 日志记录、它为何必不可少以及如何在 ASP.NET Core 5 中使用 HTTP 日志记录中间件。
要使用本文提供的代码示例,您的系统中应安装 Visual Studio 2022。如果您还没有安装,可以在此处下载 Visual Studio 2022。
在 Visual Studio 2022 中创建 ASP.NET Core MVC 6 项目
首先,让我们在 Visual Studio 2022 中创建一个 ASP.NET Core 项目。按照以下步骤将在 Visual Studio 2022 中创建一个新的 ASP.NET Core MVC 6 项目。
- 启动 Visual Studio 2022 IDE。
- 点击“创建新项目”。
- 在“创建新项目”窗口中,从显示的模板列表中选择“ASP.NET Core Web App(模型-视图-控制器)”。
- 单击“下一步”。
- 在“配置新项目”窗口中,指定新项目的名称和位置。
- 根据您的偏好,可以选择选中“将解决方案和项目放在同一目录中”复选框。
- 单击“下一步”。
- 在接下来显示的“附加信息”窗口中,从顶部的下拉列表中选择 .NET 6.0 (Preview) 作为目标框架。将“身份验证类型”保留为“无”(默认)。
- 确保未选中“启用 Docker”、“配置 HTTPS”和“启用 Razor 运行时编译”复选框,因为我们不会在这里使用任何这些功能。
- 单击“创建”。
这将在 Visual Studio 2022 中创建一个新的 ASP.NET Core MVC 6 项目。我们将在本文的后续部分中使用该项目来处理 HTTP 日志记录。
什么是 HTTP 日志中间件?
ASP.NET Core 6 中的 HTTP 日志记录中间件可用于记录 ASP.NET 6 应用程序中的请求和响应。HTTP 日志记录可以为您提供包含以下内容的日志:
- HTTP 请求信息
- HTTP 响应信息
- 标头
- 身体
- 通用属性
在 ASP.NET Core 6 中启用 HTTP 日志记录
您可以使用 UseHttpLogging 扩展方法启用 HTTP 日志记录,如下面的代码片段所示。
app.UseHttpLogging();
实际上ASP.NET Core默认开启了HTTP日志记录功能,下面是创建项目时Startup类的Configure方法的默认代码。
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
}
app.UseHttpLogging();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
});
}
}
在 ASP.NET Core 6 中配置 HTTP 日志记录中间件
HTTP 日志记录中间件在 ASP.NET Core 6 中默认可用,也就是说,您无需安装任何 NuGet 包即可使用它。要配置 HTTP 日志记录中间件,您需要调用与 IServiceCollection 接口相关的 AddHttpLogging 扩展方法。以下代码显示了如何在 Startup 类的 ConfigureServices 方法中配置此中间件。
public void ConfigureServices(IServiceCollection services)
{
services.AddHttpLogging(logging =>
{
//Write your code to configure the HttpLogging middleware here
});
services.AddControllersWithViews();
}
要配置 HTTP 请求和 HTTP 响应的特定部分,您可以利用 LoggingFields 枚举,如 ConfigureServices 方法所示。
httpLogging.LoggingFields = HttpLoggingFields.All;
在 ASP.NET Core 6 中配置请求标头
RequestHeaders 集合包含一组可以记录的请求标头。请注意,您只能记录已添加相应请求标头名称的请求标头值。以下代码片段说明了如何将请求标头添加到名为 httpLogging 的 HttpLoggingOptions 类实例的请求标头集合中。
httpLogging.RequestHeaders.Add("Request-Header-Demo");
在 ASP.NET Core 6 中配置响应标头
ResponseHeaders 集合包含一组可以记录的响应标头。您只能记录已添加相应响应标头名称的响应标头值。以下代码片段显示了如何将响应标头添加到响应标头集合。
httpLogging.ResponseHeaders.Add("Response-Header-Demo");
在 ASP.NET Core 6 中使用 MediaTypeOptions 指定编码
您可以使用 MediaTypeOptions 类的 AddText 方法指定要使用的编码。以下是说明这一点的代码示例:
httpLogging.MediaTypeOptions.AddText("application/javascript");
在 ASP.NET Core 6 中设置请求和响应正文日志限制
您还可以使用 HttpLoggingOptions 类的 RequestBodyLimit 和 ResponseBodyLimit 属性设置请求和响应主体大小限制。以下代码片段说明了如何实现这一点。
httpLogging.RequestBodyLogLimit = 4096;
httpLogging.ResponseBodyLogLimit = 4096;
请求和响应主体限制的默认值为 32 KB,即 32768 字节。您可以根据需要进行更改。
ASP.NET Core 6 中完整的 HTTP 日志记录示例
下面给出了 ConfigureServices 方法的完整源代码供您参考。
public void ConfigureServices(IServiceCollection services)
{
services.AddHttpLogging(httpLogging =>
{
httpLogging.LoggingFields = HttpLoggingFields.All;
httpLogging.RequestHeaders.Add("Request-Header-Demo");
httpLogging.ResponseHeaders.Add("Response-Header-Demo");
httpLogging.MediaTypeOptions.
AddText("application/javascript");
httpLogging.RequestBodyLogLimit = 4096;
httpLogging.ResponseBodyLogLimit = 4096;
});
services.AddControllersWithViews();
}
请注意,使用 HTTP 日志记录可能会损害应用程序的性能,尤其是在记录请求和响应主体时。因此,在选择要记录的字段时,您应该始终考虑性能影响。
如果您喜欢此文章,请收藏、点赞、评论,谢谢,祝您快乐每一天。