要在.NET Core项目中集成MiniProfiler和Swagger,可按照以下步骤操作:
1. 安装NuGet包:
• 安装MiniProfiler.AspNetCore.Mvc包以集成MiniProfiler。
• 安装MiniProfiler.EntityFrameworkCore包以监控EF Core生成的SQL语句(可选)。
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.5.0" />
1. 配置服务:
• 在Startup.cs的ConfigureServices方法中添加MiniProfiler服务配置:
{
options.RouteBasePath = "/profiler";
})
.AddEntityFramework;
• 在Configure方法中启用MiniProfiler中间件,确保它在UseEndpoints方法之前被调用:
1. 配置Swagger UI:
• 修改Startup.cs中的UseSwaggerUI中间件配置,使用自定义的index.html文件:
{
c.IndexStream = => GetType.GetTypeInfo.Assembly.GetManifestResourceStream( "YourNamespace.index.html");
c.RoutePrefix = string.Empty;
c.SwaggerEndpoint( "/swagger/v1/swagger.json", "My API V1");
});
• 确保替换YourNamespace为你的项目命名空间。
1. 获取MiniProfiler HTML代码片段:
• 在一个控制器中添加一个方法来获取MiniProfiler的HTML代码片段:
publicIActionResult GetCounts
{
varhtml = MiniProfiler.Current.RenderIncludes(_accessor.HttpContext);
returnOk(html.Value);
}
• 你也可以通过断点调试来获取这段HTML代码。
{
using (MiniProfiler.Current.Step("获取成功后,开始处理最终数据"))
{
// 一些逻辑...
using (MiniProfiler.Current.Step("准备数据"))
{
using (MiniProfiler.Current.CustomTiming("SQL", "SELECT * FROM Config"))
{
// 模拟一个SQL查询
Thread.Sleep(500);
}
}
}
var datas = Enumerable.Range(1, 5).Select(index => new WeatherForecast
{
Date = DateOnly.FromDateTime(DateTime.Now.AddDays(index)),
TemperatureC = Random.Shared.Next(-20, 55),
Summary = Summaries[Random.Shared.Next(Summaries.Length)]
});
return datas;
}
1. 将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.InjectJava("/custom.js");
}
然后再wwwroot文件夹下创建 custom.js ,将生成的Java进行更改即可
custom.js
// 等待 DOM 完全加载
document.addEventListener('DOMContentLoaded', function {
// 创建一个新的 元素
var new = document.('');
// 设置 的属性
new.async = true; // 设置为异步加载
new.id = 'mini-profiler'; // 设置 ID
new.setAttribute('data-path', '/profiler/');
new.setAttribute('data-current-id', '551f7bde-3d0b-4fe1-8cef-c6945f6f4d58');
new.setAttribute('data-position', 'Left');
new.setAttribute('data-scheme', 'Light');
new.setAttribute('data-authorized', 'true');
new.setAttribute('data-max-traces', '15');
new.setAttribute('data-toggle-shortcut', 'Alt+P');
new.setAttribute('data-trivial-milliseconds', '2.0');
new.setAttribute('data-ignored-duplicate-execute-types', 'Open,OpenAsync,Close,CloseAsync');
// 将 元素添加到文档的 head 中
document.head.(new);
});
1. 启动项目:
• 启动项目后,Swagger文档页面的左上角会出现一个小面板,当请求接口之后,会显示出当前请求的分析数据,包括接口耗时和SQL语句。
注意事项:
• 确保IHttpContextAccessor接口在Startup.cs中进行了注册,并且通过依赖注入获取了HttpContextAccessor对象。
责任编辑: