完全替换 Swashbuckle UI

Replace Swashbuckle UI completely

现在我正在开发一个 ASP.Net Web API 并使用 Swashbuckle 作为其文档。 我知道 Swashbuckle 在内部使用 Swagger-UI,我知道我们可以通过注入我们的 css 或 javascript 文件来修改布局,甚至更改 index.html 的布局。

我为 Swagger-UI https://github.com/jensoleg/swagger-ui 找到了一个很好的主题并尝试实现它但无法使其工作。特别是当我想注入 bootstrap.js 时。无论如何,我是否可以完全改变 Swashbuckle Swagger UI 实现,以便我可以使用该 repo 中的解决方案?

当然可以 - 只需两步。

1) 将文件 Index.html 作为嵌入资源包含在程序集中。例如,假设您的网络 api 项目名为 "Contosco.Api" 并且 Index.html 将位于该项目中的“/Content/Index.html”下。

2) 用你自己的

覆盖 swagger UI 主 html 页面
[assembly: PreApplicationStartMethod(typeof(SwaggerConfig), "Register")]
public class SwaggerConfig 
{
  public static void Register()
  {
    var thisAssembly = typeof(SwaggerConfig).Assembly;
    GlobalConfiguration.Configuration.EnableSwagger(c => {
     // configure swagger
    })
    .EnableSwaggerUi(c => {
      // beware - the Contosco.Api.Content.Index.html has to match your project paths :)
      c.CustomAsset("index", thisAssembly, "Contosco.Api.Content.Index.html");
    });
  }
}

您只需下载 .zip 文件夹,解压并包含到您的项目中。 在 SwaggerConfigre.cs 中,您不再需要配置。 只需将模板放入文件夹 Swagger 中,当您访问 {domain}/swagger 时,它将点击 index.html。 (不需要将构建操作更改为嵌入式资源,内容很好)

按照此处的简单步骤,我能够使用最新的 swagger-ui,https://swagger.io/docs/swagger-tools/#swagger-ui-documentation-29

  1. 从 GitHub
  2. 下载 swagger-ui
  3. 提取并复制 dist(将文件夹重命名为 swagger)文件夹并将其包含在项目中
  4. 修改 dist 文件夹中的 index.html 以指向您的 swagger 文档路径(这当然是由 Swashbuckle 生成的)

对于 .NET Core 项目,解决方案与@OndrejSvejdar 的(正确)答案略有不同:

将 index.html 添加为嵌入资源后,您必须将以下行添加到 Startup.cs 中的 app.UseSwaggerUI()...

    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        //...

        app.UseSwaggerUI(c =>
        {
            c.IndexStream = () => GetType().GetTypeInfo().Assembly.GetManifestResourceStream("Your.Default.Namespace.Subfolder.Swagger_Custom_index.html");
        });

        //...
    }

可以在此处找到该过程的所有详细信息: