I have an asp.net core web api that I created from the wizard - and it's generated code like this:
public static void Main(string[] args)
{
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddAuthorization();
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
var app = builder.Build();
// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI();
}
...
如果我运行它,我会得到一个swagger url,我可以去
https://localhost:7100/swagger/v1/swagger.yaml
然后得到一个yaml文件......那就好了。
"问题"
但是,由于各种原因,我在CI/CD进程中需要那个yaml文件,所以我希望在构建之后动态地获取它,但是启动Web服务器,调用它,我想做的是创建一个命令行选项来获取swagger文件,该文件不会启动监听http的程序,所以我可以运行"dotnet run myApi generate_swagger_yaml〉比如说:
public static void Main(string[] args)
{
if (args[0] == "generate_swagger_yaml")
{
var yamlFile = ....somehow get the swagger yaml file...
Console.Writeline( yamlfile );
return 0;
}
...
但我不知道该怎么做。
1条答案
按热度按时间bnl4lu3b1#
实际上,我建议 * 不要 * 将它直接构建到您的应用程序中。Swashbuckle(在运行时实际生成swagger文档的库)提供了一个CLI工具,它可以接受一个汇编DLL,并在一个命令中吐出所有的swagger。请在这里查看:https://github.com/domaindrivendev/Swashbuckle.AspNetCore#swashbuckleaspnetcorecli
您的CI/CD可以使用此文件将Swagger/OpenAPI文档输出到文件。