当前位置: 首页 > news >正文

WebAPI性能监控-MiniProfiler与Swagger集成

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'; // 设置 IDnewScript.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


在这里插入图片描述

相关文章:

WebAPI性能监控-MiniProfiler与Swagger集成

Net8_WebAPI性能监控-MiniProfiler与Swagger集成 要在.NET Core项目中集成MiniProfiler和Swagger&#xff0c;可以按照以下步骤操作&#xff1a; 安装NuGet包&#xff1a; 安装MiniProfiler.AspNetCore.Mvc包以集成MiniProfiler。安装MiniProfiler.EntityFrameworkCore包以监…...

视频会议接入GB28181视频指挥调度,语音对讲方案

传统的视频会议指挥调度系统目前主流的互联网会议大部分都是私有协议&#xff0c;功能都很独立。目前主流的视频监控国标都最GB平台&#xff0c;新的需求要求融合平台要接入监控等设备&#xff0c;并能实现观看监控接入会议&#xff0c;实时语音设备指挥现场工作人员办公实施。…...

深度学习和图像处理

看来你对深度学习和图像处理很感兴趣呢&#xff0c;让我来一一解答你的疑惑吧。 深度学习高纬度特征 首先&#xff0c;我猜你是想问“深度学习中的高维特征”吧。在深度学习中&#xff0c;随着网络层数的加深&#xff0c;网络的感受野逐渐变大&#xff0c;语义表达能力也随之增…...

〔 MySQL 〕数据类型

目录 1.数据类型分类 2 数值类型 2.1 tinyint类型 2.2 bit类型 2.3 小数类型 2.3.1 float 2.3.2 decimal 3 字符串类型 3.1 char 3.2 varchar 3.3 char和varchar比较 4 日期和时间类型 5 enum和set mysql表中建立属性列&#xff1a; 列名称&#xff0c;类型在后 n…...

云安全之云计算基础

0x00 前言 本文主要是针对云计算相关的基础梳理和整理。 云计算 NIST 800-145ISO/IEC 17788ISO/IEC 17789云安全 NIST 500-299 云安全ISO / IEC FDIS 27017 云安全0x01 云计算基础 什么是云计算: 一种新的运作模式和一组用于管理计算资源共享池的技术。云计算是一种颠覆性的…...

PostgreSQL pg-xact(clog)目录文件缺失处理

一、 背景 前些天晚上突然收到业务反馈&#xff0c;查询DB中的一个表报错 Could not open file "pg-xact/005E": No such file or directory. 两眼一黑难道是文件损坏了...登录查看DB日志&#xff0c;还好没有其他报错&#xff0c;业务也反馈只有这一个表在从库查询报…...

《ElementPlus 与 ElementUI 差异集合》Icon 图标 More 差异说明

参考 《element plus 使用 icon 图标(两种方式)》使用 icon 升级 Vue2 升级 Vue3 项目时&#xff0c;遇到命名时的实心与空心点差异&#xff01; ElementUI&#xff1a; 实心是 el-icon-more空心是 el-icon-more-outline ElementPlus&#xff1a; 实心是 el-icon-more-fill…...

基于碎纸片的拼接复原算法及MATLAB实现

一、问题描述 破碎文件的拼接在司法物证复原、历史文献修复以及军事情报获取等领域都有着重要的应用。传统上&#xff0c;拼接复原工作需由人工完成&#xff0c;准确率较高&#xff0c;但效率很低。特别是当碎片数量巨大&#xff0c;人工拼接很难在短时间内完成任务。随着计算…...

苍穹外卖 软件开发流程

软件开发的流程&#xff1a; 1.需求分析 完成需求规格说明书、产品原型。 需求规格说明书&#xff1a;一般而言是word文档描述当前项目的各个组成部分&#xff0c;如&#xff1a;系统定义、应用环境、功能规格、性能需求等&#xff0c;都会在文档中描述。 …...

mysqldump导出表结构和表数据和存储过程和函数

0、查看表结构信息 (1) 只查看表结构的注释信息 select table_name,table_comment from information_schema.tables where table_schema 表所在的库 and table_name 表名 &#xff1b; mysql> select table_name,table_comment from information_schema.tables where tabl…...

常见的排序算法及分类对比

虽然在竞赛和编程语言中用到的排序算法主要是时间复杂度为 O ( n log ⁡ n ) O(n \log n) O(nlogn) 的高效算法,但作为算法学习,我们要从简单到复杂,认识常见的排序算法,并理解其算法思想。本文列出几乎所有的排序算法并进行分类对比。 排序算法总表 以下是一个对比表格…...

多窗口切换——selenium

获取窗口句柄&#xff08;以Python Selenium为例&#xff09; current_window_handle方法 用于获取当前窗口的句柄。句柄是一个标识符&#xff0c;用于唯一标识一个窗口。示例代码&#xff1a; from selenium import webdriverdriver webdriver.Chrome() driver.get("…...

LFD STM32编程规范20241111

1. 源文件和头文件放同一目录bsp文件夹顺序文件注释防重复设置#include#defineenum类型声明、定义 包括struct union typedef全局变量声明文件级变量声明全局或文件级函数声明函数实现。按函数声明顺序文件尾注释。/**************END FILE**************/引用头文件不用绝对路…...

Python学习------第八天

函数 函数的传入参数 掌握函数返回值的作用 掌握函数返回值的定义语法 函数的嵌套调用&#xff1a; 函数的局部变量和全局变量 局部变量的作用&#xff1a;在函数体内部&#xff0c;临时保存数据&#xff0c;即当函数调用完成后&#xff0c;则销毁局部变量。 money 5000000 n…...

【扩散——BFS】

题目 代码 #include <bits/stdc.h> using namespace std; const int t 2020, off 2020; #define x first #define y second typedef pair<int, int> PII; int dx[] {0, 0, 1, -1}, dy[] {-1, 1, 0, 0}; int dist[6080][6080]; // 0映射到2020&#xff0c;2020…...

C++ 编程基础(5)类与对象 | 5.5、多态

文章目录 一、多态1、概念2、多态实现方式3、动态绑定与静态绑定4、虚函数4.1、声明与定义4.2、虚函数的工作原理4.3、虚函数的优点与注意事项 5、不能声明为虚函数的函数6、纯虚函数7、抽象类8、总结 前言&#xff1a; 在C编程语言中&#xff0c;多态性&#xff08;Polymorphi…...

客户端发送http请求进行流量控制

客户端发送http请求进行流量控制 实现方式 1&#xff1a;使用 Semaphore (信号量) 控制流量 asyncio.Semaphore 是一种简单的流控方法&#xff0c;可以用来限制并发请求数量。 import asyncio import aiohttp import timeclass HttpClientWithSemaphore:def __init__(self, …...

STM32 低功耗模式详解

目录 一、什么是低功耗 二、低功耗的核心思想 三、STM32的3种低功耗模式 1、睡眠模式 (Sleep Mode) 2、停止模式 (Stop Mode) 3、 待机模式 (Standby Mode) 四、相关电源管理寄存器 1、PWR_CR (Power Control Register, 电源控制寄存器) 2、PWR_CSR (Power Control/St…...

我的第一个PyQt5程序

PyQt5的开发环境配置完成之后&#xff0c;开始编写第一个PyQt5的程序。 方法一&#xff1a;使用将.ui转换成.py文件的方法 import sys from FirstPyQt import Ui_MainWindow from PyQt5.QtWidgets import *#QtCore,QtGui,QtWidgets # from QtTest import Ui_MainWindow#导入Q…...

Unity调用Python

代码如下&#xff1a; if (useAI){/** 通过PaddlePaddle进行合成处理* */// 创建线程参数对象ThreadParameters parameters new ThreadParameters(){pythonPath "python", // 如果 Python 在系统路径中&#xff0c;可以直接使用 "python"pythonScript U…...

Anything to RealCharacters效果评测:与Stable Diffusion ControlNet写实方案对比

Anything to RealCharacters效果评测&#xff1a;与Stable Diffusion ControlNet写实方案对比 1. 项目概述 Anything to RealCharacters是一款专为RTX 4090显卡优化的2.5D转真人图像转换系统。这个工具基于通义千问Qwen-Image-Edit-2511图像编辑底座&#xff0c;集成了专门的…...

Python安全开发之简易Xss检测工具(详细注释)

核心代码&#xff1a;import requests # requests 库 - HTTP 请求处理库 # 【常用功能】: # requests.get(url) - 发送 HTTP GET 请求 # requests.post(url, data) - 发送 HTTP POST 请求 # response.text - 获取响应体内容&#xff08;字符串&#xff09; #…...

河海大学材料科学与工程及材料与化工专业考研复试资料(含《材料分析方法》笔试专项)

温馨提示&#xff1a;文末有联系方式河海大学材料类考研复试资料全面升级 本套资料专为报考河海大学材料科学与工程、材料与化工两个硕士专业的考生设计&#xff0c;聚焦复试核心笔试科目——《材料分析方法》&#xff0c;助力精准高效备考。由2025届一志愿录取考生权威整理 所…...

简单介绍C语言中的字符串函数

1.首先给出字符分类函数这几个就简单过一下&#xff0c;不做重点说明。这两个为字符转换函数&#xff0c;顾名思义&#xff0c;没什么好介绍的&#xff1b;接下来简单介绍几个字符串函数&#xff1a;strlen.strcpy.strcat.strstr.strncpy.strncat.memcpy.memmove;strlen:求字符…...

黑客为什么不攻击微信钱包?

黑客为什么不攻击微信钱包&#xff1f; 现在人人手机里都装着微信和支付宝&#xff0c;里面都或多或少存了些钱。怎么从来没听说谁的钱被技术牛逼黑客惦记走&#xff1f; 是黑客没攻击过&#xff1f;还是黑客不敢攻击&#xff1f;其实都不是。阿里巴巴首席风险官郑俊芳就说过&…...

运算放大器与比较器的本质区别及应用指南

1. 运算放大器与比较器的本质区别在电子电路设计中&#xff0c;运算放大器&#xff08;Op-Amp&#xff09;和电压比较器&#xff08;Comparator&#xff09;是两种极为常见却又经常被混淆的器件。它们在外观符号上几乎一模一样&#xff1a;都有五个引脚——正负电源端、同相与反…...

本地Cookie管理工具:安全导出与高效应用指南

本地Cookie管理工具&#xff1a;安全导出与高效应用指南 【免费下载链接】Get-cookies.txt-LOCALLY Get cookies.txt, NEVER send information outside. 项目地址: https://gitcode.com/gh_mirrors/ge/Get-cookies.txt-LOCALLY 在当今数字化环境中&#xff0c;Cookie作为…...

程序运行机制:编译、链接与装入详解

1. 程序运行的底层机制解析作为一名在嵌入式系统开发领域工作多年的工程师&#xff0c;我经常需要深入理解程序从源代码到最终执行的完整过程。这个看似简单的"程序运行"背后&#xff0c;实际上隐藏着编译、链接、装入这三个关键阶段。今天&#xff0c;我就结合自己的…...

告别复杂安装:用快马AI一键生成opencode可运行原型

最近在折腾一个开源项目时&#xff0c;被各种依赖安装和环境配置搞得头大。作为一个经常需要快速验证想法的开发者&#xff0c;我一直在寻找能跳过这些繁琐步骤的工具。直到发现了InsCode(快马)平台&#xff0c;它彻底改变了我的开发流程。 传统安装的痛点 以前要运行一个openc…...

Cadence Virtuoso实战:从反相器原理图到GDS版图,手把手搞定你的第一个CMOS Layout

Cadence Virtuoso实战&#xff1a;从反相器原理图到GDS版图全流程解析 在集成电路设计领域&#xff0c;从原理图到物理版图的实现是一个充满挑战又极具成就感的过程。对于初入行的工程师或微电子专业学生来说&#xff0c;掌握Cadence Virtuoso工具链的完整工作流程&#xff0c;…...