是否可以创建多个 Swagger 文档 URL?
Is it possible to create multiple Swagger document URLs?
我有一个使用 Web API 2 的网站,我正在使用 Swashbuckle Swagger 生成 API 文档并导出 Azure API 管理的 JSON 配置.在我的场景中,如果 API 可以按 Swagger 文档 URL (http://example.com/swagger/{my-api-group}) 中定义的值进行分组,那将是理想的。但是,经过一些研究,我找不到实现这一点的方法。
据我了解,目前为了更改 Swagger 导出文件,我需要在每次更改时重新启动环境,这在我的场景中并不理想。
我试过看看能否从 NuGet 包中获取开源代码,看看我是否能理解 Swashbuckle 的内部工作原理。此外,我知道这可以使用 "Swashbuckle.AspNetCore" 实现,但这不是一个选项,因为我将此功能集成到大型 .NET Framework 解决方案中,这将是一项艰巨的任务。
是的,你可以这样做,这是一个例子:
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:
上的过滤器
我有一个使用 Web API 2 的网站,我正在使用 Swashbuckle Swagger 生成 API 文档并导出 Azure API 管理的 JSON 配置.在我的场景中,如果 API 可以按 Swagger 文档 URL (http://example.com/swagger/{my-api-group}) 中定义的值进行分组,那将是理想的。但是,经过一些研究,我找不到实现这一点的方法。
据我了解,目前为了更改 Swagger 导出文件,我需要在每次更改时重新启动环境,这在我的场景中并不理想。
我试过看看能否从 NuGet 包中获取开源代码,看看我是否能理解 Swashbuckle 的内部工作原理。此外,我知道这可以使用 "Swashbuckle.AspNetCore" 实现,但这不是一个选项,因为我将此功能集成到大型 .NET Framework 解决方案中,这将是一项艰巨的任务。
是的,你可以这样做,这是一个例子:
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:
上的过滤器