zoukankan      html  css  js  c++  java
  • NetCore集成MiniProfiler+Swagger

    安装Nuget

    Install-Package MiniProfiler.AspNetCore.Mvc
    

    配置startup.cs

     #region MiniProfiler
                services.AddMiniProfiler(options =>
                options.RouteBasePath = "/profiler"
     #endregion
    

    激活中间件 Configure

    //激活UseMiniProfiler
     app.UseMiniProfiler();
    

    自定义Swagger页面

    <!-- HTML for static distribution bundle build -->
    <script async="async" id="mini-profiler" src="/profiler/includes.min.js?v=4.2.1+b27bea37e9"         data-version="4.2.1+b27bea37e9" data-path="/profiler/"         data-current-id="142f3c02-c5d7-42e0-be9e-2a45e46d727a"         data-ids="64b457a1-275e-4bfa-9b2f-e5bd5385a80f,142f3c02-c5d7-42e0-be9e-2a45e46d727a"         data-position="Left"         data-scheme="Light"         data-authorized="true"         data-max-traces="15"         data-toggle-shortcut="Alt+P"         data-trivial-milliseconds="2.0"         data-ignored-duplicate-execute-types="Open,OpenAsync,Close,CloseAsync"></script> 
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>%(DocumentTitle)</title>
        <link rel="stylesheet" type="text/css" href="./swagger-ui.css">
        <link rel="icon" type="image/png" href="./favicon-32x32.png" sizes="32x32" />
        <link rel="icon" type="image/png" href="./favicon-16x16.png" sizes="16x16" />
    
    
        <style>
    
            html {
                box-sizing: border-box;
                overflow: -moz-scrollbars-vertical;
                overflow-y: scroll;
            }
    
            *,
            *:before,
            *:after {
                box-sizing: inherit;
            }
    
            body {
                margin: 0;
                background: #fafafa;
            }
        </style>
        %(HeadContent)
    </head>
    
    <body>
        <div id="swagger-ui"></div>
    
        <!-- Workaround for https://github.com/swagger-api/swagger-editor/issues/1371 -->
        <script>
            if (window.navigator.userAgent.indexOf("Edge") > -1) {
                console.log("Removing native Edge fetch in favor of swagger-ui's polyfill")
                window.fetch = undefined;
            }
        </script>
    
        <script src="./swagger-ui-bundle.js"></script>
        <script src="./swagger-ui-standalone-preset.js"></script>
        <script>
            /* Source: https://gist.github.com/lamberta/3768814
             * Parse a string function definition and return a function object. Does not use eval.
             * @param {string} str
             * @return {function}
             *
             * Example:
             *  var f = function (x, y) { return x * y; };
             *  var g = parseFunction(f.toString());
             *  g(33, 3); //=> 99
             */
            function parseFunction(str) {
                if (!str) return void (0);
    
                var fn_body_idx = str.indexOf('{'),
                    fn_body = str.substring(fn_body_idx + 1, str.lastIndexOf('}')),
                    fn_declare = str.substring(0, fn_body_idx),
                    fn_params = fn_declare.substring(fn_declare.indexOf('(') + 1, fn_declare.lastIndexOf(')')),
                    args = fn_params.split(',');
    
                args.push(fn_body);
    
                function Fn() {
                    return Function.apply(this, args);
                }
                Fn.prototype = Function.prototype;
    
                return new Fn();
            }
    
            window.onload = function () {
                var configObject = JSON.parse('%(ConfigObject)');
                var oauthConfigObject = JSON.parse('%(OAuthConfigObject)');
    
                // Workaround for https://github.com/swagger-api/swagger-ui/issues/5945
                configObject.urls.forEach(function (item) {
                    if (item.url.startsWith("http") || item.url.startsWith("/")) return;
                    item.url = window.location.href.replace("index.html", item.url).split('#')[0];
                });
    
                // If validatorUrl is not explicitly provided, disable the feature by setting to null
                if (!configObject.hasOwnProperty("validatorUrl"))
                    configObject.validatorUrl = null
    
                // If oauth2RedirectUrl isn't specified, use the built-in default
                if (!configObject.hasOwnProperty("oauth2RedirectUrl"))
                    configObject.oauth2RedirectUrl = window.location.href.replace("index.html", "oauth2-redirect.html").split('#')[0];
    
                // Apply mandatory parameters
                configObject.dom_id = "#swagger-ui";
                configObject.presets = [SwaggerUIBundle.presets.apis, SwaggerUIStandalonePreset];
                configObject.layout = "StandaloneLayout";
    
                // Parse and add interceptor functions
                var interceptors = JSON.parse('%(Interceptors)');
                if (interceptors.RequestInterceptorFunction)
                    configObject.requestInterceptor = parseFunction(interceptors.RequestInterceptorFunction);
                if (interceptors.ResponseInterceptorFunction)
                    configObject.responseInterceptor = parseFunction(interceptors.ResponseInterceptorFunction);
    
                // Begin Swagger UI call region
    
                const ui = SwaggerUIBundle(configObject);
    
                ui.initOAuth(oauthConfigObject);
    
                // End Swagger UI call region
    
                window.ui = ui
            }
        </script>
    </body>
    </html>
    

    将该文件放到API层的根目录下,设置文件属性为【嵌入的资源】

    修改UseSwaggerUI中间件的配置

    注意:这里Snblog是项目的命名空间名

                app.UseSwaggerUI(c =>
                {
                    c.IndexStream = () => GetType().GetTypeInfo()
                    .Assembly.GetManifestResourceStream("Snblog.index.html");
                    ////设置首页为Swagger
                    c.RoutePrefix = string.Empty;
                    //自定义页面 集成性能分析
                    c.SwaggerEndpoint("/swagger/v1/swagger.json", "SN博客API");
                    ////设置为none可折叠所有方法
                    c.DocExpansion(DocExpansion.None);
                    ////设置为-1 可不显示models
                    c.DefaultModelsExpandDepth(-1);
    
                });
    
  • 相关阅读:
    md基本语法
    CodeBlocks安装使用、汉化以及更改配色
    hexo+github搭建个人博客教程和各种坑记录
    GB/T 38637.1-2020 物联网 感知控制设备接入 第1部分:总体要求
    山东大学909数据结构与程序设计考研经验分享
    GB/T 39083-2020 快递服务支付信息交换规范
    GB/T 38829-2020 IPTV媒体交付系统技术要求 内容接入
    GB/T 37733.3-2020 传感器网络 个人健康状态远程监测 第3部分:终端技术要求
    GB/T 38801-2020 内容分发网络技术要求 互联应用场景
    GB/T 30269.809-2020 信息技术 传感器网络 第809部分:测试:基于IP的无线传感器网络网络层协议一致性测试
  • 原文地址:https://www.cnblogs.com/ouyangkai/p/14593044.html
Copyright © 2011-2022 走看看