代码之家  ›  专栏  ›  技术社区  ›  PhoenixAshes

中的自定义swagger ui过滤器插件(opsFilter)。NET Core应用程序

  •  0
  • PhoenixAshes  · 技术社区  · 3 年前

    我正在尝试为提供自定义逻辑 opsFilter .

    我的应用程序是 Microsoft.NET.Sdk.Web 瞄准 net7.0 .

    app.UseSwaggerUI(o =>
      {
          o.SwaggerEndpoint("v1/swagger.json", "MyApplication");
          o.EnableTryItOutByDefault();
          o.DocExpansion(Swashbuckle.AspNetCore.SwaggerUI.DocExpansion.None);
          o.EnableDeepLinking();
          o.EnableFilter();
    
          // custom filter as the default from EnableFilter() only filters on tags and is case sensitive
          o.InjectJavascript("/js/custom-swagger-ui-filter.js");
      });
    

    我开始为我的自定义js(来自 this issue )

    const CaseInsensitiveFilterPlugin = function (system) {
        return {
            fn: {
                opsFilter: (taggedOps, phrase) => {
                    console.log("hello " + phrase)
                    return taggedOps.filter((tagObj, tag) => tag.toLowerCase().indexOf(phrase.toLowerCase()) !== -1);
                }
            }
        }
    };
    
    document.addEventListener("load", function () {
        console.log("loading custom filter!")
        window.SwaggerUIBundle({
            plugins: [
                CaseInsensitiveFilterPlugin
            ],
        });
    });
    

    生成此html(截断以关注问题)

    </head>
    ...
    <script src='/js/custom-swagger-ui-filter.js' type='text/javascript'></script>
    ...
    </head>
    
    <body>
        <div id="swagger-ui"></div>
    
        ...
    
        <script src="./swagger-ui-bundle.js"></script>
        <script src="./swagger-ui-standalone-preset.js"></script>
        ...
    </body>
    

    插件函数不会被调用,所以在我搜索时仍然应用默认的过滤器。当我检查时,我看不到我的插件 window.SwaggerUiBundle.plugins 对象

    除了试图覆盖整个index.html以确保我的脚本在 swagger-ui-bundle.js ,你知道如何做到这一点吗?

    谢谢大家!

    • 在加载所有索引页后,尝试在浏览器控制台中手动设置筛选器,只是为了验证概念,但它仍然没有被覆盖
    0 回复  |  直到 3 年前