WebAPI性能监控-MiniProfiler与Swagger集成

news2024/11/15 16:14:48

Net8_WebAPI性能监控-MiniProfiler与Swagger集成

要在.NET Core项目中集成MiniProfiler和Swagger,可以按照以下步骤操作:

  1. 安装NuGet包
    • 安装MiniProfiler.AspNetCore.Mvc包以集成MiniProfiler。
    • 安装MiniProfiler.EntityFrameworkCore包以监控EF Core生成的SQL语句(可选)。
    <PackageReference Include="MiniProfiler.AspNetCore.Mvc" Version="4.3.8" />
    <PackageReference Include="Swashbuckle.AspNetCore" Version="6.5.0" />
  1. 配置服务

    • 在Startup.cs的ConfigureServices方法中添加MiniProfiler服务配置:

      services.AddMiniProfiler(options =>
      {
          options.RouteBasePath = "/profiler";
      })
      .AddEntityFramework();
      
    • 在Configure方法中启用MiniProfiler中间件,确保它在UseEndpoints方法之前被调用:

      app.UseMiniProfiler();
      
  2. 配置Swagger UI

    • 下载自定义的Swagger UI页面(例如从GitHub上的xuke353/swaggerui项目)并将其放置在API项目的根目录下,设置文件属性为“嵌入的资源”。

    • 修改Startup.cs中的UseSwaggerUI中间件配置,使用自定义的index.html文件:

      app.UseSwaggerUI(c =>
      {
          c.IndexStream = () => GetType().GetTypeInfo().Assembly.GetManifestResourceStream("YourNamespace.index.html");
          c.RoutePrefix = string.Empty;
          c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1");
      });
      

    • 确保替换YourNamespace为你的项目命名空间。

  3. 获取MiniProfiler HTML代码片段

    • 在一个控制器中添加一个方法来获取MiniProfiler的HTML代码片段:

      [HttpGet]
      public IActionResult GetCounts()
      {
          var html = MiniProfiler.Current.RenderIncludes(_accessor.HttpContext);
          return Ok(html.Value);
      }
      
    • 你也可以通过断点调试来获取这段HTML代码。

  4. 将HTML代码片段添加到Swagger UI

    • 将获取到的HTML代码片段粘贴到自定义的Swagger UI的index.html文件的顶部。

会出现流访问异常,就是不能再开个swagger进行访问
An unhandled exception occurred while processing the request.
ArgumentException: Stream was not readable.
System.IO.StreamReader…ctor(Stream stream, Encoding encoding, bool detectEncodingFromByteOrderMarks, int bufferSize, bool leaveOpen)

解决方法

                app.UseSwaggerUI(c => {
                    c.InjectJavascript("/custom.js");
                   }

然后再wwwroot文件夹下创建 custom.js,将生成的Javascript进行更改即可

custom.js

// 等待 DOM 完全加载
document.addEventListener('DOMContentLoaded', function () {
    // 创建一个新的 script 元素
    var newScript = document.createElement('script');

    // 设置 script 的属性
    newScript.async = true; // 设置为异步加载
    newScript.id = 'mini-profiler'; // 设置 ID
    newScript.src = '/profiler/includes.min.js?v=4.3.8+1120572909'; // 设置脚本的源文件路径
    newScript.setAttribute('data-version', '4.3.8+1120572909');
    newScript.setAttribute('data-path', '/profiler/');
    newScript.setAttribute('data-current-id', '551f7bde-3d0b-4fe1-8cef-c6945f6f4d58');
    newScript.setAttribute('data-ids', 'a264a19a-395d-4e61-970f-6249ab868614,d26da3fb-eca3-4ada-899b-e85058c6010b,8dc76f68-5c1c-495d-95d0-5f07258aacf1,70f16caa-76de-4cd0-a957-82849d471053,41628017-8871-4b2a-af0c-5dfc2a6424cd,51df7af6-93ee-44b1-ba70-97920acbd3b9,4cee7860-8154-4897-81d7-7436c7408778,ba92e686-e4e3-4af6-8329-3c14645998b8,dbe17478-119b-49e3-bd4b-a83fe182354d,551f7bde-3d0b-4fe1-8cef-c6945f6f4d58');
    newScript.setAttribute('data-position', 'Left');
    newScript.setAttribute('data-scheme', 'Light');
    newScript.setAttribute('data-authorized', 'true');
    newScript.setAttribute('data-max-traces', '15');
    newScript.setAttribute('data-toggle-shortcut', 'Alt+P');
    newScript.setAttribute('data-trivial-milliseconds', '2.0');
    newScript.setAttribute('data-ignored-duplicate-execute-types', 'Open,OpenAsync,Close,CloseAsync');

    // 将 script 元素添加到文档的 head 中
    document.head.appendChild(newScript);
});
  1. 启动项目
    • 启动项目后,Swagger文档页面的左上角会出现一个小面板,当请求接口之后,会显示出当前请求的分析数据,包括接口耗时和SQL语句。

注意事项:

  • 确保IHttpContextAccessor接口在Startup.cs中进行了注册,并且通过依赖注入获取了HttpContextAccessor对象。

代码获取

关注回复241111


在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2240939.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

第十五章 Spring之假如让你来写AOP——Joinpoint(连接点)篇

Spring源码阅读目录 第一部分——IOC篇 第一章 Spring之最熟悉的陌生人——IOC 第二章 Spring之假如让你来写IOC容器——加载资源篇 第三章 Spring之假如让你来写IOC容器——解析配置文件篇 第四章 Spring之假如让你来写IOC容器——XML配置文件篇 第五章 Spring之假如让你来写…

喜讯 | 科东软件荣获广东省工业软件科学技术进步奖一等奖

工业软件是制造业数字化、智能化转型升级的核心支撑&#xff0c;贯穿于工业生产的全过程&#xff0c;包括研发设计、测试&#xff0c;智能装备与操作系统嵌入式&#xff0c;系统与平台&#xff0c;算法、模型与工具等类型。通过开展工业软件科学技术奖评选活动&#xff0c;激励…

SystemVerilog学习笔记(二):数组

数组是元素的集合&#xff0c;所有元素都具有相同的类型&#xff0c;并使用其名称和一个或多个索引进行访问。 Verilog 2001 要求数组的下限和上限必须是数组声明的一部分。 System Verilog 引入了紧凑数组声明样式&#xff0c;只需给出数组大小以及数组名称声明就足够了。 下…

批量从Excel某一列中找到符合要求的值并提取其对应数据

本文介绍在Excel中&#xff0c;从某一列数据中找到与已知数据对应的字段&#xff0c;并提取这个字段对应数值的方法。 首先&#xff0c;来明确一下我们的需求。现在已知一个Excel数据&#xff0c;假设其中W列包含了上海市全部社区的名称&#xff0c;而其后的Y列则是这些社区对应…

握手协议是如何在SSL VPN中发挥作用的?

SSL握手协议&#xff1a;客户端和服务器通过握手协议建立一个会话。会话包含一组参数&#xff0c;主要有会话ID、对方的证书、加密算法列表&#xff08;包括密钥交换算法、数据加密算法和MAC算法&#xff09;、压缩算法以及主密钥。SSL会话可以被多个连接共享&#xff0c;以减少…

数字化转型:基于价值流的业务架构战略解析

在当前数字化浪潮下&#xff0c;企业纷纷转向数字化转型&#xff0c;以适应市场需求的快速变化和技术革新。数字化转型不仅仅是技术层面的变革&#xff0c;更是对企业业务模式、文化以及价值创造方式的全面重新思考和重塑。《价值流&#xff08;Value Streams&#xff09;》为企…

Mac终端字体高亮、提示插件

一、安装配置“oh my zsh” 1.1 安装brew /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)" 按照步骤安装即可&#xff0c;安装完成查看版本 brew -v 1.2 安装zsh brew install zsh 安装完成后查看版本 zsh --version 1.3 …

什么是CRM系统?

越来越多的企业意识到&#xff1a;如何有效管理与客户的关系、提升客户满意度&#xff0c;并通过这些提升推动销售增长&#xff0c;已经成为许多公司亟待解决的问题。为此&#xff0c;客户关系管理&#xff08;Customer Relationship Management&#xff0c;简称CRM&#xff09…

Ilya Sutskever AI行业将进入一个新的“探索时代”

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

MySQL(5)【数据类型 —— 字符串类型】

阅读导航 引言一、char&#x1f3af;基本语法&#x1f3af;使用示例 二、varchar&#x1f3af;基本语法&#x1f3af;使用示例 三、char 和 varchar 比较四、日期和时间类型1. 基本概念2. 使用示例 五、enum 和 set&#x1f3af;基本语法 引言 之前我们聊过MySQL中的数值类型&…

湾区聚力 开源启智 | 2024 CCF中国开源大会暨第五届OpenI/O启智开发者大会闪耀深圳

当下&#xff0c;全球数字化浪潮席卷而来&#xff0c;开源技术已成为科技创新和产业升级的关键驱动力。11月9-10日&#xff0c;以“湾区聚力 开源启智”为主题的2024 CCF中国开源大会在深圳隆重举行。本届大会由中国计算机学会主办&#xff0c;CCF开源发展委员会、鹏城实验室、…

Linux基本指令(中)(2)

文章目录 前言一、echo二、cat三、more四、less五、head六、tail七、date八、cal九、find十、whoami十一、clear总结 前言 承上启下&#xff0c;我们再来看看另外一些常用的基础指令吧&#xff01; 一、echo 语法&#xff1a;echo [选项] [字符串] 功能&#xff1a;在终端设备上…

MYSQL中JDBC的使用

一、JDBC基础概念 JDBC 是Java 中的一组API&#xff0c;用于执行SQL 操作&#xff08;例如CRUD 操作&#xff1a;增、删、改、关系&#xff09;&#xff0c;同时可以和各种类型的数据库类型进行连接&#xff08;MySQL、Oracle、SQL Server 等&#xff09;。 JDBC是Java标准库的…

UnixBench和Geekbench进行服务器跑分

1 概述 服务器的基准测试&#xff0c;常见的测试工具有UnixBench、Geekbench、sysbench等。本文主要介绍UnixBench和Geekbench。 1.1 UnixBench UnixBench是一款开源的测试UNIX系统基本性能的工具&#xff08;https://github.com/kdlucas/byte-unixbench&#xff09;&#x…

基于Java Springboot人力资源管理系统

一、作品包含 源码数据库设计文档万字全套环境和工具资源部署教程 二、项目技术 前端技术&#xff1a;Html、Css、Js、Vue 数据库&#xff1a;MySQL 后端技术&#xff1a;Java、Spring Boot、MyBatis 三、运行环境 开发工具&#xff1a;IDEA 数据库&#xff1a;MySQL8.0…

使用OpenCV(C++)通过鼠标点击操作获取图像的像素坐标和像素值

使用OpenCV&#xff08;C&#xff09;通过鼠标点击操作获取图像的像素坐标和像素值 在这篇博客中&#xff0c;我们将介绍如何使用OpenCV库在C中实现鼠标点击操作&#xff0c;以获取图像的像素坐标和像素值。代码分为两个部分&#xff1a;一个是鼠标事件处理的回调函数&#xff…

Windows VSCode .NET CORE WebAPI Debug配置

1.安装C#插件 全名C# for Visual Studio Code&#xff0c;选择微软的 2. 安装C# Dev Kit插件 全名C# Dev Kit for Visual Studio Code&#xff0c;同样是选择微软的 3.安装Debugger for Unity 4.配置launch.json 文件 {"version": "0.2.0","config…

AI斩获6枚金牌!华为Kaggle大师级智能体诞生,自主解决数据科学难题

继 OpenAI o1 成为首个达到 Kaggle 特级大师的人工智能&#xff08;AI&#xff09;模型后&#xff0c;另一个 Kaggle 大师级 AI 也诞生了。 根据 Kaggle 的晋级系统&#xff0c;由华为诺亚方舟实验室和伦敦大学学院团队联合推出的端到端自主数据科学智能体&#xff08;agent&a…

[Mysql基础] 表的操作

一、创建表 1.1 语法 CREATE TABLE table_name ( field1 datatype, field2 datatype, field3 datatype ) character set 字符集 collate 校验规则 engine 存储引擎; 说明&#xff1a; field 表示列名 datatype 表示列的类型 character set 字符集&#xff0c;如果没有指定字符集…

04 简单神经网络推导及实现(C++/C)

简单神经网络推导及实现&#xff08;C/C&#xff09; 代码见A simple neural network - stock price prediction as an example(C/C) 1. 主要模块 Neuron.h&#xff1a;用于声明神经元类和构造函数。Layer.h&#xff1a;用于声明网络层类和构造函数。NNet.h&#xff1a;用于…