Swashbuckle 版本控制选择默认的 API 版本出现在 Swagger
Posted
技术标签:
【中文标题】Swashbuckle 版本控制选择默认的 API 版本出现在 Swagger【英文标题】:Swashbuckle versioning choose default API version to appear in Swagger 【发布时间】:2020-05-14 17:37:20 【问题描述】:我正在对我的 API 进行版本控制,我想在 Swagger 中显示最新的 API 版本作为默认值。比如我的API有2个版本,当有人选择展示Swagger时,最先出现的版本是V1.0。用户必须手动选择要显示的最新版本。
在下图中我们可以看到,应用启动时向用户显示的默认版本是V1.0。
我想知道是否可以默认向用户显示最新的 API 版本。
谢谢!
【问题讨论】:
【参考方案1】:首先我在 Startup.cs 的 Configure 类中添加了 IApiVersionDescriptionProvider 如下所示:
之后,我不得不反转包含可用于 app.UseSwaggerUI() 中 api 版本的列表。
您在 Startup.cs Configure 方法中配置 Swagger UI 的顺序决定了下拉列表的顺序。
app.UseSwaggerUI(c =>
foreach (var description in apiVersionDescriptionProvider.ApiVersionDescriptions.Reverse())
// Create the Swagger endpoints for each version
c.SwaggerEndpoint($"/swagger/" +
$"LibraryOpenAPISpecificationdescription.GroupName/swagger.json",
description.GroupName.ToUpperInvariant());
c.RoutePrefix = ""; // swagger UI at the root index.html
);
@Bob Ash 的以下回答非常有帮助 - How can i specify the default opening version of swagger?
通过这样做,我现在成功地将 V2.0 显示为 api 的默认版本:
【讨论】:
【参考方案2】:我的解决方案是将OrderByDescending
子句添加到以下代码块中:
// build a swagger document and endpoint for each discovered API version
c.MultipleApiVersions(
(apiDescription, version) => apiDescription.GetGroupName() == version,
info =>
foreach (var group in apiExplorer.ApiDescriptions.OrderByDescending(p => p.ApiVersion))
var description = "My Company API";
info.Version(group.Name, $"My Company API group.ApiVersion")
.Contact(ca => ca.Name("My Company).Email("info@mycompany.com"))
.Description(description)
.License(l => l.Name("My Company").Url("https://mycompany.com"))
.TermsOfService("");
);
就我而言,我还根据自己的需要使用该迭代来应用一些 UI 细节。
【讨论】:
在@fabio指定的位置使用OrderByDescending
,好像比Reverse准确一点。以上是关于Swashbuckle 版本控制选择默认的 API 版本出现在 Swagger的主要内容,如果未能解决你的问题,请参考以下文章
Swashbuckle 5 找不到我的 ApiControllers
ASP.NET Web Api 中的 Swashbuckle 被嵌套控制器混淆
csharp Swashbuckle operationsfilter用于标题版本控制
将 Swashbuckle 添加到 .NET Core Web API 应用程序后,访问版本化路由会返回 404