Swagger WebApi 在构建时创建 JSON

16

有没有办法在我的Web API的构建任务期间创建Swagger JSON?我想使用JSON将其输入代码生成器并生成TypeScript定义文件。

欢迎任何帮助!


NSwag为Web API控制器生成Swagger规范:https://github.com/NSwag/NSwag - Rico Suter
谢谢!有没有办法通过命令行工具一次性创建(和合并)所有控制器的JSON文件? - Domenic
你想将多个控制器合并为一个 Swagger 规范吗?(或者将多个规范合并为一个?) - Rico Suter
我在我的WebAPI中有多个控制器。我不想为它们每一个创建Swagger-Spec文件。我想要进行一次单独的NSwag调用并创建一个单独的规范,而不指定哪些控制器在WebAPI中(NSwag应该自动检测它们)。 - Domenic
这很容易,给我几天时间...一旦实现,我将尽快关闭以下问题:https://github.com/NSwag/NSwag/issues/7 - Rico Suter
哇,这太棒了。谢谢! - Domenic
2个回答

19

我正在使用Swashbuckle.AspNetCore.Cli(注意:我正在使用.NET Core 3.1) https://github.com/domaindrivendev/Swashbuckle.AspNetCore

添加以下软件包:

<PackageReference Include="Swashbuckle.AspNetCore" Version="5.0.0-rc5" />
<PackageReference Include="Swashbuckle.AspNetCore.Newtonsoft" Version="5.3.1" />
<PackageReference Include="Swashbuckle.AspNetCore.Swagger" Version="5.3.1" />

接下来,创建一个工具清单:

dotnet new tool-manifest

安装Swashbuckle CLI工具并将其添加到本地清单文件中:

dotnet tool install --version 5.3.1 Swashbuckle.AspNetCore.Cli

现在你可以使用dotnet命令来生成swagger.json文件。例如:
dotnet swagger tofile --output api.json bin/debug/netcoreapp3.1/xxx.yourApi.dll v1

如果您希望在每次生成时生成文件,请在您的 csproj 文件中使用 PostBuild 目标。
<Target Name="PostBuild" AfterTargets="PostBuildEvent">
    <Exec Command="dotnet tool restore" />
    <Exec Command="dotnet swagger tofile --output swagger.json $(OutputPath)\$(AssemblyName).dll v1 " />
</Target>

1
我遇到了以下错误: 严重性 代码 描述 项目 文件 行 抑制状态 错误 NU1202 包 Swashbuckle.AspNetCore.Cli 6.1.3 与 netcoreapp3.1 (.NETCoreApp,Version = v3.1) 不兼容。包Swashbuckle.AspNetCore.Cli 6.1.3支持:
  • net5.0 (.NETCoreApp,Version = v5.0) / any
  • netcoreapp2.1 (.NETCoreApp,Version = v2.1) / any
  • netcoreapp3.0 (.NETCoreApp,Version = v3.0) / any
- zzy
这似乎是一个不错的选择,但似乎不支持 dotnet 5.0:`未找到任何兼容的框架版本。找不到 'Microsoft.AspNetCore.App' 框架,版本 '3.0.0'。
  • 找到了以下框架: 5.0.9`
- Robert Cutajar
1
好的!它实际上可以在版本 6.1.5 中工作。 - Robert Cutajar
警告 - 这在 .Net 6 中不起作用 - 即使使用正确的(6.4.0)版本的工具也是如此。 - Mark Walsh
@MarkWalsh 这确实适用于.NET 6。请确保使用正确版本的工具,即6.4.0版本。 - Enrico
显示剩余3条评论

6
您可以这样使用NSwag命令行工具:
nswag.exe webapi2swagger /assembly:"path/to/assembly.dll" /output:"path/to/swagger.json"

这将为给定的DLL中的所有控制器生成Swagger规范。
如需更多信息,请阅读此页面

你能贴出你收到的异常信息吗? - Rico Suter
好的,但这是调用服务时实际的运行时错误,而不是来自 NSwag 工具的异常? - Rico Suter
问题出现在WebApiToSwaggerGenerator类的CreatePrimitiveParameter方法中。在那里,您会检查对象和数组,并使它们“无法解析”。 - Domenic
...或者MyClass类是否标记有ModelBinder属性? - Rico Suter
这是一个查询参数。它可以从路由中检测到。但如果我不得不在参数后面添加一个[FromUri]属性,也不会有什么损失。 - Domenic
显示剩余9条评论

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