ASP.NET Core如何知道一个请求执行了哪些中间件?

第一步,添加Nuget包引用

需要添加两个Nuget包分别是:Microsoft.AspNetCore.MiddlewareAnalysisMicrosoft.Extensions.DiagnosticAdapter,前者是分析记录中间件核心代码实现后者是用来接收日志输出的,由于是用的DiagnosticSource方式记录日志,所以需要使用DiagnosticListener对象的SubscribeWithAdapter方法来订阅。

第二步,实现一个分析诊断适配器

这个适配器是为了方便我们把从DiagnosticSource接收到的日志对象输出到控制台,具体代码实现如下

    public class AnalysisDiagnosticAdapter
    {
        private readonly ILogger<AnalysisDiagnosticAdapter> _logger;
        public AnalysisDiagnosticAdapter(ILogger<AnalysisDiagnosticAdapter> logger)
        {
            _logger = logger;
        }

        [DiagnosticName("Microsoft.AspNetCore.MiddlewareAnalysis.MiddlewareStarting")]
        public void OnMiddlewareStarting(HttpContext httpContext, string name, Guid instance, long timestamp)
        {
            _logger.LogInformation($"中间件-启动: '{name}'; Request Path: '{httpContext.Request.Path}'");
        }

        [DiagnosticName("Microsoft.AspNetCore.MiddlewareAnalysis.MiddlewareException")]
        public void OnMiddlewareException(Exception exception, HttpContext httpContext, string name, Guid instance, long timestamp, long duration)
        {
            _logger.LogInformation($"中间件-异常: '{name}'; '{exception.Message}'");
        }

        [DiagnosticName("Microsoft.AspNetCore.MiddlewareAnalysis.MiddlewareFinished")]
        public void OnMiddlewareFinished(HttpContext httpContext, string name, Guid instance, long timestamp, long duration)
        {
            _logger.LogInformation($"中间件-结束: 耗时[{duration/10000}] '{name}'; Status: '{httpContext.Response.StatusCode}'");
        }
    }

第三步,注册相关服务来启用分析中间件的功能

  1. 注册中间件分析服务
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddMiddlewareAnalysis();
  1. 订阅我们的分析诊断适配器
var listener = app.Services.GetRequiredService<DiagnosticListener>();
var observer = ActivatorUtilities.CreateInstance<AnalysisDiagnosticAdapter>(app.Services);
using var disposable = listener.SubscribeWithAdapter(observer);

这样基本就完成了分析记录中间件的功能,启动程序看看效果
ASP.NET Core如何知道一个请求执行了哪些中间件?

日志已经成功的输出到我们的控制台了,不过才四个中间件,应该不止这么少的,再在注册中间件分析服务哪里添加一句代码

var builder = WebApplication.CreateBuilder(args);
// 新增的下面这句代码
builder.Services.Insert(0, ServiceDescriptor.Transient<IStartupFilter, AnalysisStartupFilter>());
builder.Services.AddMiddlewareAnalysis();

现在再来看看效果,发现变成8个中间件了多了四个
ASP.NET Core如何知道一个请求执行了哪些中间件?

在Release模式编译后,运行发现中间件的执行效率非常高,几乎不占用时间
ASP.NET Core如何知道一个请求执行了哪些中间件?

异常记录这里就不放图了,有兴趣的朋友自己去试试。
简单三步就可以知道一个请求到底执行了哪些中间件还是挺方便的。想知道实现原理可以去看看Microsoft.AspNetCore.MiddlewareAnalysis这个库,一共才四个文件看起来不费事。

原文链接:https://www.cnblogs.com/Ax0ne/p/17300692.html

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:ASP.NET Core如何知道一个请求执行了哪些中间件? - Python技术站

(0)
上一篇 2023年4月18日
下一篇 2023年4月18日

相关文章

  • C#静态static的用法实例分析

    C#静态static的用法实例分析 什么是C#静态static C#中可以使用static关键字来表示静态成员。所谓静态成员,就是可以在不实例化类的情况下访问的成员。静态成员可以是属性、方法、字段等。 public class MyClass { public static int MyStaticProperty { get; set; } public …

    C# 2023年5月31日
    00
  • C#使用SqlServer作为日志数据库的设计与实现

    C#使用SqlServer作为日志数据库的设计与实现,可以采用以下步骤: 1. 创建数据库表格 首先在SqlServer中创建一个数据库,并在其中创建一个用于存储日志的表格。例如: create table LogInfo( ID int identity(1,1) primary key, LogContent nvarchar(4000) not nul…

    C# 2023年5月15日
    00
  • asp.net输出重写压缩页面文件实例代码

    ASP.NET是一款常用的Web应用程序开发框架,提供了很多优秀的功能。其中,输出重写和压缩页面文件也是ASP.NET的一个很重要的功能。下面,我将向大家详细讲解“asp.net输出重写压缩页面文件实例代码”的完整攻略。 一、什么是输出重写 ASP.NET中,输出重写是一种技术,可以动态地修改应用程序输出的HTML代码。当ASP.NET处理应用程序时,会生成…

    C# 2023年5月31日
    00
  • php中html_entity_decode实现HTML实体转义

    那么下面就是详细讲解“php中html_entity_decode实现HTML实体转义”的完整攻略。 简介 HTML实体转义是指将HTML文档中特殊字符转义为HTML实体的过程。例如,将”<“字符转义为”<“,将”>”字符转义为”>”。这样做是为了避免这些字符被当作HTML标签解释,从而干扰文档的结构。 在PHP中,我们可以使用htm…

    C# 2023年6月3日
    00
  • C# 线程相关知识总结

    C#线程相关知识总结 在C#语言中,线程是一种轻量级的执行单元,它可以独立执行代码,并与其他线程并发执行。线程可以简化编程过程,提高程序的效率。在本篇文章中,我们将总结C#线程的相关知识。 线程的基本概念 程序和进程的概念 在介绍线程之前,我们需要先了解程序和进程的概念。程序是指可执行文件,是CPU可以直接执行的二进制代码;而进程是指正在运行的程序的一个实例…

    C# 2023年5月15日
    00
  • C#读写注册表的思路及代码

    下面我就详细讲解一下“C#读写注册表的思路及代码”的完整攻略。 思路 Windows操作系统提供了一个注册表(注册表是一种集中存放操作系统、硬件设备驱动程序及其他一些软件的信息的数据库)。在C#中可以使用Microsoft.Win32命名空间中的Registry类来实现对注册表的读写操作。对于注册表的读写操作,也有必要进行错误处理和异常处理。 下面是一个使用…

    C# 2023年5月15日
    00
  • asp.net 文件下载功能函数代码整理

    我来为您详细讲解如何整理“ASP.NET文件下载功能函数代码”。 1. 准备工作 在开始整理代码之前,我们需要先创建一个空白的ASP.NET Web应用程序,以及在应用程序中添加文件下载功能所需要的按钮和相关控件。 2. 在代码中添加文件下载功能函数 我们可以在C#代码中添加文件下载功能函数,使我们能够在需要的地方直接调用该函数来实现文件下载。下面是一个简单…

    C# 2023年5月31日
    00
  • Web应用开发TypeScript使用详解

    Web应用开发TypeScript使用详解 简介 本攻略将介绍如何在Web应用开发中使用TypeScript,包括安装TypeScript、配置TypeScript环境、使用TypeScript编写前端代码等。 安装TypeScript 要使用TypeScript,需要先安装TypeScript编译器。可以通过以下命令来安装TypeScript: npm i…

    C# 2023年5月15日
    00
合作推广
合作推广
分享本页
返回顶部