Swashbuckle - No paths in OpenApiDocument

33 Views Asked by At

I'm trying to get the swagger.json file that Swashbuckle is generating for my Swagger endpoint.

Code:

public void Initialize(WebApplicationBuilder builder, string[] args)
{
    builder.Services.AddEndpointsApiExplorer();
    builder.Services.AddSwaggerGen(c =>
    {
        c.SwaggerDoc("v1", new OpenApiInfo { Title = "API", Description = "My own service", Version = "v1" });
        c.EnableAnnotations();
    });

    a = builder.Build();

    if (args.Contains("--swag"))
    {
        a.Services.SaveSwagger();
        Console.WriteLine("swagger saved to docs/swagger");
        Environment.Exit(0)
    }

    ...
}

public static void SaveSwagger(this IServiceProvider provider)
{
    ISwaggerProvider sw = provider.GetRequiredService<ISwaggerProvider>();
    OpenApiDocument doc = sw.GetSwagger("v1");
    string swaggerFile = doc.SerializeAsJson(Microsoft.OpenApi.OpenApiSpecVersion.OpenApi3_0);
    File.WriteAllText("docs/swagger/swagger.json", swaggerFile);
    swaggerFile = doc.SerializeAsYaml(Microsoft.OpenApi.OpenApiSpecVersion.OpenApi3_0);
    File.WriteAllText("docs/swagger/swagger.yaml", swaggerFile);
}

It outputs empty swagger dummies. When debugging, OpenApiDocument doc = sw.GetSwagger("v1"); returns an OpenApiDocument where Paths.Count == 0, even though it does successfully generate for the endpoint and shows everything I want.

Why the results are different? Is there any way to grab swagger.json from my running app and save it where I need?

P.S. Please note it is impossible to use Swashbuckle CLI in my case.

0

There are 0 best solutions below