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.