如何在 ASP.NET Core 6 中使用 HTTP 日志记录

利用 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 项目。

  1. 启动 Visual Studio 2022 IDE。
  2. 点击“创建新项目”。
  3. 在“创建新项目”窗口中,从显示的模板列表中选择“ASP.NET Core Web App(模型-视图-控制器)”。
  4. 单击“下一步”。
  5. 在“配置新项目”窗口中,指定新项目的名称和位置。
  6. 根据您的偏好,可以选择选中“将解决方案和项目放在同一目录中”复选框。
  7. 单击“下一步”。
  8. 在接下来显示的“附加信息”窗口中,从顶部的下拉列表中选择 .NET 6.0 (Preview) 作为目标框架。将“身份验证类型”保留为“无”(默认)。
  9. 确保未选中“启用 Docker”、“配置 HTTPS”和“启用 Razor 运行时编译”复选框,因为我们不会在这里使用任何这些功能。
  10. 单击“创建”。

        这将在 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 日志记录可能会损害应用程序的性能,尤其是在记录请求和响应主体时。因此,在选择要记录的字段时,您应该始终考虑性能影响。 

如果您喜欢此文章,请收藏、点赞、评论,谢谢,祝您快乐每一天。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

csdn_aspnet

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值