您如何更改 Swagger 图标?

Posted

技术标签:

【中文标题】您如何更改 Swagger 图标?【英文标题】:How do you change the Swagger favicon? 【发布时间】:2019-01-06 19:56:24 【问题描述】:

我正在构建一个 ASP.NET CORE Web API 并使用 Swagger 作为文档。我无法更改图标。我在 wwwroot 下有一个 swagger-ui 目录,我在其中放置了我的 favicon,但 favicon 永远不存在。此外,我正在自定义 js 文件中使用 favascript 更改网站图标。

那么,如何更改 Swagger 的网站图标?

【问题讨论】:

【参考方案1】:

你需要注入 jscript 如下:

1- 创建 /assets/js/docs.js 如下:

(function() 
    var link = document.querySelector("link[rel*='icon']") || document.createElement('link');;
    document.head.removeChild(link);
    link = document.querySelector("link[rel*='icon']") || document.createElement('link');
    document.head.removeChild(link);
    link = document.createElement('link');
    link.type = 'image/x-icon';
    link.rel = 'shortcut icon';
    link.href = '../assets/images/logo_icon.png';
    document.getElementsByTagName('head')[0].appendChild(link);
)();

2- 在你的 startup.cs 中加载脚本

public void Configure(IApplicationBuilder app, IHostingEnvironment env, IApiVersionDescriptionProvider provider)
        
            app.UseSwaggerUI(
                options =>
                                    
                    options.Injectjavascript("../assets/js/docs.js");  
                );

        

注意:确保在 .NET Core 配置方法中启用静态文件。

public void Configure(IApplicationBuilder app, IHostingEnvironment env, IApiVersionDescriptionProvider provider)


    app.UseStaticFiles(); // For the wwwroot folder

    app.UseStaticFiles(new StaticFileOptions
    
        FileProvider = new PhysicalFileProvider(Path.Combine(Directory.GetCurrentDirectory(), "assets/images")),
        RequestPath = "/assets/images"
    );        

    app.UseStaticFiles(new StaticFileOptions
    
        FileProvider = new PhysicalFileProvider(Path.Combine(Directory.GetCurrentDirectory(), "assets/js")),
        RequestPath = "/assets/js"
    );

【讨论】:

上面的 JS 对我有用。唯一的问题是在运行 JS 之前它仍然显示默认值的一小段时间。【参考方案2】:

如果您只需将 favicon.ico 放在 wwwroot 文件夹的根目录下,也可以实现这一点:wwwroot/favicon.ico。 favicon.ico 位于根目录,用作默认浏览器选项卡图标。

当然,如前所述,您需要确保在 Configure() 方法中有 app.UseStaticFiles(); 以便在 wwwroot 中提供文件。

最后还要确保您的 .csproj 文件中有以下内容:

  <ItemGroup>
    <None Include="wwwroot\*" />
  </ItemGroup>

【讨论】:

【参考方案3】:

这对我有用:

首先,您必须创建 wwwroot 文件夹,并在其中放置一个名为 swagger 的文件夹。编辑您的 csproj 以包含此行:

<ItemGroup>
    <None Include="wwwroot\*" />
</ItemGroup> 

此目录下的文件必须为ContentDo not copy。无论如何,这是默认选项。

然后,您必须在 swagger 文件夹中放置两个名为 favicon-16x16.pngfavicon-32x32.png 的 png 文件。

最后一件事,在 app.UseSwaggerUI(); 之前添加 app.UseStaticFiles(); 以使其工作。

您也可以在 wwwroot 文件夹下添加一个 favicon.ico。

** 注意:如果您修改了端点 url,使用 app.UseSwaggerUI(config =&gt; config.SwaggerEndpoint("my/swagger/doc/file.json", "Rest API"));,wwwroot 下的目录树必须与 url 匹配。即wwwroot/my/swagger/doc/favicon-16x16.pngwwwroot/my/swagger/doc/favicon-32x32.png

【讨论】:

【参考方案4】:

您必须从根本上覆盖它。默认情况下,Swagger UI 将图标设置为从 Swagger UI 根目录中提取。例如,如果您在/swagger-ui 加载文档,则从/swagger-ui/favicon-32x32.png/swagger-ui/favicon-16x16.png 中提取图标。因此,您可以将此目录添加到您的wwwroot 并在那里添加您自己的网站图标图像。

【讨论】:

感谢您的快速回复!在我的项目中,我在 swagger-ui 目录下有 png 文件。但是,当我在 localhost 下运行我的项目时,png 文件不在我的 swagger-ui 目录下。关于他们为什么失踪的任何想法? 把目录名从swagger-ui改成swagger,把上面提到的同名的两个png文件放到上面。 以上对我不起作用。事实上,我可以看到它从&lt;url root&gt;/swagger/ui/images 获取上面的图像,所以我把它们放在那里,但我仍然在浏览器选项卡中获得默认的招摇图标。虽然我没有使用 asp.core(它只是 asp.net),所以不确定这是否会改变事情..

以上是关于您如何更改 Swagger 图标?的主要内容,如果未能解决你的问题,请参考以下文章

更改 swagger-ui dist bundle 的默认端口

在 Swagger UI 中,如何从“匿名”方法中删除挂锁图标?

如何使用 nestjs/swagger 更改查询参数序列化?

如何更改 swagger-ui.html 默认路径

如何使用 OpenApi 自定义 swagger-ui.html url

如何在 ASP.NET Core 中更改 Swagger 的基本 url