ASP.NET Swashbuckle如何将生成的swagger.json存储到代码仓库?
实现Swashbuckle自动保存swagger.json到项目目录的方法
完全可以实现,以下是两种常用的实现方案:
方案一:项目启动运行时自动导出(最贴合你的需求)
适合每次运行项目时自动生成最新的swagger.json文件,步骤如下:
- 确认你已经安装了
Swashbuckle.AspNetCoreNuGet包,这是生成Swagger文档的基础依赖 - 在项目启动代码中添加导出逻辑,.NET 6+ 版本的Minimal API在
Program.cs中添加如下代码:
var builder = WebApplication.CreateBuilder(args); // 你原本的Swagger配置 builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(); var app = builder.Build(); // ========== 添加导出swagger.json的逻辑 ========== if (app.Environment.IsDevelopment()) // 你也可以去掉判断,所有环境都导出 { using var scope = app.Services.CreateScope(); var swaggerProvider = scope.ServiceProvider.GetRequiredService<ISwaggerProvider>(); var swaggerDoc = swaggerProvider.GetSwagger("v1"); // 这里的v1要和你AddSwaggerGen里配置的版本号一致 // 配置导出路径,示例是导出到项目根目录的docs文件夹下,../../../是从bin目录回退到项目根目录 var outputPath = Path.Combine(AppContext.BaseDirectory, "../../../docs/swagger.json"); var directory = Path.GetDirectoryName(outputPath); if (!Directory.Exists(directory)) { Directory.CreateDirectory(directory); } // 序列化并写入文件 using var streamWriter = new StreamWriter(outputPath); var jsonWriter = new OpenApiJsonWriter(streamWriter); swaggerDoc.SerializeAsV3(jsonWriter); // 如果用的是OpenApi V2版本就用SerializeAsV2 } // ========== 导出逻辑结束 ========== // 你原本的中间件配置 app.UseSwagger(); app.UseSwaggerUI(); // 其他中间件和路由配置... app.Run();
需要引入Microsoft.OpenApi.Writers和Swashbuckle.AspNetCore.Swagger命名空间,否则会出现编译错误
- 配置完成后每次运行项目,就会自动把最新的swagger.json写入你指定的路径,你可以把这个路径的文件直接纳入Git仓库管理即可
方案二:构建时自动导出(无需运行项目)
如果你不需要每次启动都生成,希望构建项目时自动导出,可以用Swashbuckle官方提供的CLI工具实现:
- 安装CLI工具:
dotnet tool install --global Swashbuckle.AspNetCore.Cli - 在项目的属性->构建事件->后构建事件中添加如下命令:
swagger tofile --output docs/swagger.json $(TargetPath) v1
- 之后每次执行
dotnet build时都会自动生成最新的swagger.json到指定路径
注意事项
- 导出时指定的版本号
v1必须和你Swagger配置中的文档版本完全一致,否则会导出失败 - 如果你的项目有多个Swagger文档版本,需要为每个版本单独执行导出逻辑
- 要确保导出路径的读写权限正常,避免写入失败
内容的提问来源于stack exchange,提问作者DaveVentura
相关产品推荐
相关产品推荐

