在构建时生成Swagger JSON

12
我正在开发一个ASP.NET Core WebAPI项目,想找到一种在构建时生成Swagger JSON的方法。
因为我需要使用4个不同的环境,所以我希望有4个具有不同名称的swagger.json文件,例如:
- swagger_{appName}dev{buildNumber}.json - swagger_{appName}demo{buildNumber}.json - swagger_{appName}int{buildNumber}.json - swagger_{appName}staging{buildNumber}.json
是否可以编辑JSON中的字段?我想要根据环境编辑以下字段: host、schemes和basePath。
我正在使用Swashbuckle.AspNetCore,但似乎它没有这样的选项,我错了吗?
提前感谢。

2
可能是一个特别回答了问题的重复。https://dev59.com/AFwX5IYBdhLWcg3w4Ss3 - ttugates
3个回答

10
您可以使用Swashbuckle.AspNetCore.Cli NuGet包在命令行中生成OpenApi json文件,而无需部署。
命令将类似于以下内容,并可作为“构建后”脚本添加:
dotnet <nugetpackages>\Swashbuckle.AspNetCore.Cli\bin\$(Configuration)\netcoreapp<ver>\dotnet-swagger.dll tofile --host http://localhost --output swagger.json <bin>\<AssemblyName>.dll v1

这里可以找到更多细节信息:https://github.com/domaindrivendev/Swashbuckle.AspNetCore#swashbuckleaspnetcorecli 我不确定关于为每个环境生成单独文件的问题。

@Step 有什么建议吗,如果我需要生成所有版本?如果跳过V1,它会失败。 - kumar

0
这里有一篇关于在构建时生成swagger.json文件的好文章。
这是摘要。
  1. 在项目的根目录下执行以下命令:

    dotnet new tool-manifest
    
  2. 然后执行以下命令:

    dotnet tool install SwashBuckle.AspNetCore.Cli
    
  3. 将以下代码片段添加到 Web 项目的 .csproj 文件中(该项目包含 Swagger NuGet 包):

    <Target Name="CreateSwaggerJson" AfterTargets="Build" Condition="$(Configuration)=='Debug'">
       <Exec Command="dotnet swagger tofile --output ./PATH_WHERE_YOU_WANT/swagger.json $(OutputPath)$(AssemblyName).dll v1" WorkingDirectory="$(ProjectDir)" />
    </Target>
    
PATH_WHERE_YOU_WANT 替换为您想要的路径(使用已存在的文件夹,此脚本不会创建不存在的文件夹)

-1

简单的方法是使用PowerShell任务来更新json文件并保存为另一个名称。

简单的工作流程:

  1. 通过Get-Content脚本读取文件
  2. 使用ConvertFrom-Json将内容转换为对象
  3. 设置要更新对象的属性值
  4. 使用ConvertTo-Json将对象转换为JSON格式的字符串
  5. 使用Set-Content将内容写入文件

有关详细代码,您可以参考此主题:如何使用PowerShell更新json文件

构建号值存储在预定义变量中:Build.BuildNumber(PowerShell:$env:BUILD_BUILDNUMBER


2
我会看一下这个 ;) 但是第一步是读取json文件,如果构建项目时没有swagger.json文件,我该如何读取它呢?(构建项目时,有.dll、.deps.json、.pdb、.runtimeconfig.json和.runtimeconfig.dev.json文件,但没有swagger.json文件) - moueidat
你如何在本地机器上生成swagger.json? - starian chen-MSFT
1
我访问的URL地址(运行时)为:localhost:5000/swagger/v1/swagger.json - moueidat
通过PowerShell任务运行核心应用程序https://dev59.com/BJnga4cB1Zd3GeqPcru2,然后调用API生成swagger.json。(您可以调用start-sleep PS脚本等待几秒钟) - starian chen-MSFT

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接