是否可以创建多个Swagger文档URL?

时间:2019-06-21 12:15:44

标签: c# api swagger documentation swashbuckle

我有一个使用Web API 2的网站,并且正在使用Swashbuckle Swagger生成API文档并导出用于Azure API管理的JSON配置。在我的场景中,如果可以将Swagger文档URL(http://example.com/swagger/ {my-api-group})中定义的值归为一组,则API是理想的。但是,经过一些研究,我找不到实现此目的的方法。

据我了解,目前为了更改Swagger导出文件,每次发生更改时我都需要重新启动环境,这在我的情况下并不理想。

我试图查看是否可以从NuGet软件包中获取开放源代码,以查看是否可以了解Swashbuckle的内部工作原理。此外,我知道可以使用“ Swashbuckle.AspNetCore”来实现,但这不是一个选择,因为我正在将此功能集成到大型.NET Framework解决方案中,这将是一项艰巨的任务。

1 个答案:

答案 0 :(得分:0)

是的,您可以这样做,下面是一个示例:
http://swagger-net-test-multiapiversions.azurewebsites.net/swagger/ui/index

其源代码在这里:
https://github.com/heldersepu/Swagger-Net-Test/tree/MultiApiVersions

关键在于配置:

// If your API has multiple versions, use "MultipleApiVersions" instead of "SingleApiVersion".
// In this case, you must provide a lambda that tells Swagger-Net which actions should be
// included in the docs for a given API version. Like "SingleApiVersion", each call to "Version"
// returns an "Info" builder so you can provide additional metadata per API version.
//
c.MultipleApiVersions(
    (apiDesc, targetApiVersion) => targetApiVersion.Equals("default", StringComparison.InvariantCultureIgnoreCase) ||     
                                   apiDesc.Route.RouteTemplate.StartsWith(targetApiVersion, StringComparison.InvariantCultureIgnoreCase), 
                    (vc) =>
                    {
                        vc.Version("default", "Swagger_Test");
                        vc.Version("v1_0", "Swagger_Test V1_0");
                        vc.Version("v2_0", "Swagger_Test V2_0");
                    });

另一个选择可能是利用最新UI上的过滤器:

相关问题