ASP.NET Web API Adding Swashbuckle to Web API Project Step by step Implementation and Top 10 Questions and Answers
 Last Update: April 01, 2025      9 mins read      Difficulty-Level: beginner

Certainly! Below is a detailed guide on how to add Swashbuckle (now known as Swashbuckle.AspNetCore) to an ASP.NET Core Web API project, which is an essential tool for generating interactive API documentation directly from your code.

Step-by-Step Guide: Adding Swashbuckle to an ASP.NET Core Web API Project

Introduction:

Swagger is a powerful tool that helps in designing, documenting, invoking, and visualizing RESTful APIs. Swashbuckle is a set of tools that adds to the .NET Core API the capability to create Swagger documentation automatically. Swashbuckle.AspNetCore is the .NET Core version of this library.

Setting Up the Project:

Before integrating Swashbuckle into an ASP.NET Core Web API, ensure you have a working ASP.NET Core project. You can create one using Visual Studio or the command-line interface by executing:

dotnet new webapi -n MyWebApi

This command creates a new ASP.NET Core Web API project named MyWebApi.

Adding Swashbuckle to the Project:

To integrate Swashbuckle into your project, you first need to install the Swashbuckle.AspNetCore NuGet package.

  1. Install via NuGet Package Manager:

    • Open Visual Studio.
    • Navigate to the Solution Explorer.
    • Right-click on the project and select Manage NuGet Packages.
    • In the NuGet Package Manager, switch to the Browse tab and search for Swashbuckle.AspNetCore.
    • Install the latest version of the package.
  2. Install via .NET CLI: Open your terminal or command prompt, navigate to your project directory, and run:

    dotnet add package Swashbuckle.AspNetCore
    

Configuring Swagger in Startup.cs:

After installing the package, you need to configure Swagger in your project.

  1. Enable Swagger in Program.cs or Startup.cs (depending on your ASP.NET Core version):

Starting from .NET 6, the Startup.cs file is merged into the Program.cs file. Here’s how you configure Swagger:

For .NET 6 and above (Program.cs):

using Microsoft.Extensions.DependencyInjection;
using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.Hosting;
using Microsoft.OpenApi.Models;

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddControllers();

// Adding Swagger with Swagger JSON endpoint
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen(c =>
{
    c.SwaggerDoc("v1", new OpenApiInfo { Title = "MyWebApi", Version = "v1" });
});

var app = builder.Build();

// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
    app.UseSwagger();
    app.UseSwaggerUI();
}

app.UseHttpsRedirection();

app.UseAuthorization();

app.MapControllers();

app.Run();

For Earlier versions of .NET (Startup.cs):

public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddControllers();

        // Register the Swagger generator, defining 1 or more Swagger documents
        services.AddSwaggerGen(c =>
        {
            c.SwaggerDoc("v1", new OpenApiInfo { Title = "MyWebApi", Version = "v1" });
        });
    }

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();

            // Enable middleware to serve generated Swagger as a JSON endpoint.
            app.UseSwagger();

            // Enable middleware to serve swagger-ui (HTML, JS, CSS, etc.),
            // specifying the Swagger JSON endpoint.
            app.UseSwaggerUI(c =>
            {
                c.SwaggerEndpoint("/swagger/v1/swagger.json", "MyWebApi V1");
            });
        }

        app.UseHttpsRedirection();

        app.UseRouting();

        app.UseAuthorization();

        app.UseEndpoints(endpoints =>
        {
            endpoints.MapControllers();
        });
    }
}

Customizing Swagger Documentation:

Swashbuckle can be customized to show more detailed information about your API, including descriptions of parameters, responses, and the data models.

  1. Adding XML Comments: To enable XML comments generation:

    • Open the .csproj file and add the following under the <PropertyGroup> tag:
      <GenerateDocumentationFile>true</GenerateDocumentationFile>
      <NoWarn>$(NoWarn);1591</NoWarn>
      
    • In your Startup.cs (or Program.cs), configure Swagger to use these comments:
      services.AddSwaggerGen(c =>
      {
          c.SwaggerDoc("v1", new OpenApiInfo { Title = "MyWebApi", Version = "v1" });
      
          var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";
          var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile);
          c.IncludeXmlComments(xmlPath);
      });
      
  2. Describing Controllers and Actions: Use XML comments to describe your controllers and actions:

    /// <summary>
    /// Provides operations to interact with users.
    /// </summary>
    [ApiController]
    [Route("[controller]")]
    public class UsersController : ControllerBase
    {
        /// <summary>
        /// Retrieves a specific user by identifier.
        /// </summary>
        /// <param name="id">The ID of the user to retrieve.</param>
        /// <returns>A User object.</returns>
        [HttpGet("{id}")]
        public IActionResult GetUser(int id)
        {
            // Implementation
        }
    }
    

Enhancing Swagger UI with Annotations:

Swashbuckle provides annotations like [SwaggerResponse] and [SwaggerOperation] to add metadata to actions.

  1. Using Annotations:
    [ApiController]
    [Route("[controller]")]
    public class UsersController : ControllerBase
    {
        /// <summary>
        /// Retrieves a specific user by identifier.
        /// </summary>
        /// <param name="id">The ID of the user to retrieve.</param>
        /// <returns>A User object.</returns>
        [HttpGet("{id}")]
        [SwaggerOperation("GetUserById")]
        [SwaggerResponse(200, "Returns the user", typeof(User))]
        [SwaggerResponse(404, "User not found.")]
        public IActionResult GetUser(int id)
        {
            // Implementation
        }
    }
    

Testing the Swagger UI:

Once configured, run your project (dotnet run). Navigate to http://localhost:<port>/swagger in your browser. You should see the Swagger UI where you can explore and test your API endpoints.

Conclusion:

Integrating Swashbuckle into your ASP.NET Core Web API projects can significantly improve the maintainability and usability of your APIs. By automatically generating documentation and providing an interactive testing UI, developers can focus more on writing code and less on creating and maintaining manual documentation. This guide should serve as a comprehensive start to leveraging the power of Swashbuckle in your projects.

By following the steps outlined in this guide, you should now have a working Swashbuckle setup for your ASP.NET Core Web API project, providing rich interactive documentation. You can further customize and extend the functionality of your Swagger documentation to best suit your API's needs.

Happy coding!