ASP.NET.core Swagger编程生成Swagger文件

wfauudbj  于 2022-11-29  发布在  .NET
关注(0)|答案(1)|浏览(151)

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;
   }
   ...

但我不知道该怎么做。

bnl4lu3b

bnl4lu3b1#

实际上,我建议 * 不要 * 将它直接构建到您的应用程序中。Swashbuckle(在运行时实际生成swagger文档的库)提供了一个CLI工具,它可以接受一个汇编DLL,并在一个命令中吐出所有的swagger。请在这里查看:https://github.com/domaindrivendev/Swashbuckle.AspNetCore#swashbuckleaspnetcorecli
您的CI/CD可以使用此文件将Swagger/OpenAPI文档输出到文件。

相关问题