Swashbuckle版本控制选择默认API版本以显示在Swagger中

3z6pesqy  于 2023-06-29  发布在  其他
关注(0)|答案(2)|浏览(136)

我正在对我的API进行版本控制,我希望在Swagger中显示最新的API版本作为默认版本。例如,我的API有两个版本,当有人选择显示Swagger时,首先出现的版本是V1.0。用户必须手动选择要显示的最新版本。
在下面的图像中,我们可以看到,当应用程序启动时显示给用户的默认版本是V1.0。

我想知道是否可以默认向用户显示最新的API版本。

4xy9mtcn

4xy9mtcn1#

首先,我在Startup.cs的Configure类中添加了IapiVersionDescriptionProvider,如下所示:

在那之后,我不得不反转包含appl.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/" +
                    $"LibraryOpenAPISpecification{description.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的默认版本:

wvyml7n5

wvyml7n52#

我的解决方案是在下面的代码块中添加一个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细节。

相关问题