Configure OpenAPI
The document generation configuration is done in the Program class of the API. A call to the extension method AddSwaggerGen(Action<SwaggerGenOptions> setupAction) is made passing an action to generate the documentation options.
Each call to AddSwaggerGen() will generate a new document. The parameters passed will be used to configure the rules for document generation. The output of a document generation process is a simple JSON file. By default, the file(spec) will be available on /swagger/versionName/swagger.json.
Example
    services
        .AddSwaggerGen(c =>
        {
            c.SwaggerDoc("all", new OpenApiInfo
            {
                Version = "all",
                Title = "Menu API",
                Description = "APIs used to interact and manage menus for a restaurant",
                Contact = new OpenApiContact
                {
                    Name = "Ensono",
                    Url = new Uri(projectUrl),
                    Email = "stacks@ensono.com"
                }
            });
            c.IncludeXmlComments($"{AppContext.BaseDirectory}{Path.DirectorySeparatorChar}{typeof(xxENSONOxx.xxSTACKSxx.API.Program).Assembly.GetName().Name}.xml");
            c.IncludeXmlComments($"{AppContext.BaseDirectory}{Path.DirectorySeparatorChar}{typeof(CreateMenuRequest).Assembly.GetName().Name}.xml");
            c.DocumentFilter<SwaggerDocumentTagger>(new OpenApiTag[]
            {
                new OpenApiTag { Name = "Menu" },
                new OpenApiTag { Name = "Category" },
                new OpenApiTag { Name = "Item" }
            }, new string[] { });
            c.TagActionsBy(api => new[] { api.GroupName ?? api.ActionDescriptor.RouteValues["controller"] });
            c.DocInclusionPredicate((docName, apiDesc) => true);
            c.CustomOperationIds(apiDesc => apiDesc.TryGetMethodInfo(out var methodInfo) ? methodInfo.Name : null);
            c.ConfigureForJwtBearerAuthentication(jwtBearerAuthenticationConfiguration);
        })
        .AddSwaggerGen(c =>
        {
            c.SwaggerDoc("v1", new OpenApiInfo
            {
                Version = "v1",
                Title = "Menu API",
                Description = "APIs used to interact and manage menus for a restaurant",
                Contact = new OpenApiContact
                {
                    Name = "Ensono",
                    Url = new Uri(projectUrl),
                    Email = "stacks@ensono.com"
                }
            });
            c.IncludeXmlComments($"{AppContext.BaseDirectory}{Path.DirectorySeparatorChar}{typeof(xxENSONOxx.xxSTACKSxx.API.Program).Assembly.GetName().Name}.xml");
            c.DocumentFilter<VersionPathFilter>("/v1");
        })
        .AddSwaggerGen(c =>
        {
            c.SwaggerDoc("v2", new OpenApiInfo
            {
                Version = "v2",
                Title = "Menu API",
                Description = "APIs used to interact and manage menus for a restaurant",
                Contact = new OpenApiContact
                {
                    Name = "Ensono",
                    Url = new Uri(projectUrl),
                    Email = "stacks@ensono.com"
                }
            });
            c.IncludeXmlComments($"{AppContext.BaseDirectory}{Path.DirectorySeparatorChar}{typeof(xxENSONOxx.xxSTACKSxx.API.Program).Assembly.GetName().Name}.xml");
            c.DocumentFilter<VersionPathFilter>("/v2");
        });
The snippet above demonstrates the usage of .AddSwaggerGen() to register the document generation. The output of this snipped will generate a document found on the path /swagger/v1/swagger.json.