首页 > 解决方案 > 如何从配置文件中设置 swagger 配置属性

问题描述

我正在使用 Azure API 管理来托管 API 的三个版本 - dev、qa、stage。这些基本上是 api 的三种不同构建配置,因此当导入 APIM 时 - “MyAPI-dev”、“MyAPI-qa”、“MyAPI-stage”。

我正在使用 swagger 来记录文档。当我在 Terraform 中触发修订以构建/重新创建 API 定义时,出现错误:

"my-ApiM-dev" / Resource Group "rg-myApim"): apimanagement.APIClient#CreateOrUpdate: Failure sending 
request: StatusCode=409 -- Original Error: Code="IdentifierAlreadyInUse" Message="Resource already exists." 

我 99% 确定这是由于SwaggerConfig.cs文件中的“标题”,它对于所有配置都是相同的值。因此,部署两个具有相同标题的 API 会引发错误。

GlobalConfiguration.Configuration
  .EnableSwagger(c =>
    {
      c.SingleApiVersion("v1", "MyApiTitle");
    }

如何根据配置使标题唯一?

我尝试在 web.config 值中为每个配置创建配置值并引用配置文件中的键,但它不起作用,SwaggerUi 仅在 web.config 文件中选择了默认值。

web.dev.config:

<add key="BuildConfig" value="dev" xdt:Transform="SetAttributes" xdt:Locator="Match(key)"/>

SwaggerConfig.cs:

GlobalConfiguration.Configuration
    .EnableSwagger(c =>
    {
        c.SingleApiVersion("v1", "MyApiTitle-" + ConfigurationManager.AppSettings["BuildConfig"]);
    }

另一种选择是编写脚本删除 API、导入 API 并重命名标题,但我会作为最后的手段这样做。

想在项目代码中动态地做到这一点。

标签: swaggerswagger-uiswashbuckle

解决方案


我可以使用 PowerShell 来实现这一点,请检查是否对您有帮助

https://medium.com/@rakesh.suryawanshi/deploy-azure-web-api-into-azure-api-management-with-powershell-3d14d1610b07

另外,检查您是否能够使用您的方法手动部署它。


推荐阅读