完全替换 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
- 从 GitHub
下载 swagger-ui
- 提取并复制 dist(将文件夹重命名为 swagger)文件夹并将其包含在项目中
- 修改 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");
});
//...
}
可以在此处找到该过程的所有详细信息:
现在我正在开发一个 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
- 从 GitHub 下载 swagger-ui
- 提取并复制 dist(将文件夹重命名为 swagger)文件夹并将其包含在项目中
- 修改 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");
});
//...
}
可以在此处找到该过程的所有详细信息: