IRONSOFTWAREHOME
ATUALIZAÇÕES DO DESENVOLVEDOR

Swashbuckle ASP.NET Core (Como funciona para desenvolvedores)

Curtis Chau
Curtis Chau
Updated: 21 de abril de 2026

O Swashbuckle é um pacote NuGet para C# .NET Core que auxilia na documentação automática de APIs Web RESTful. Neste blog, vamos explorar os pacotes NuGet Swashbuckle ASP.NET Core e IronPDF Installation Instructions , que possibilitam o desenvolvimento moderno de APIs Web ASP.NET Core . Juntos, eles oferecem uma série de funcionalidades que podem ser implementadas com o mínimo de código.

As páginas de documentação da API são exibidas usando a ferramenta Swagger UI, que utiliza um arquivo swagger.json gerado a partir do projeto Web API. O documento JSON gerado segue o padrão Open API. O Swashbuckle está disponível como um pacote NuGet, o Swashbuckle.AspNetCore , que, quando instalado e configurado, expõe automaticamente o JSON do Swagger. A ferramenta Swagger UI lê o arquivo JSON do Swagger, gerado a partir de comentários XML escritos nas APIs. Além disso, um arquivo de documentação XML pode ser criado habilitando-o nas configurações do projeto. Os comentários XML são convertidos em um arquivo de documentação XML, a partir do qual o JSON do Swagger é gerado. Em seguida, o middleware Swagger lê o JSON e expõe os endpoints JSON do Swagger.

Implementação em projeto de API Web .NET Core

Vamos começar com um projeto de API Web:

dotnet new webapi -n SwashbuckleDemo
cd SwashbuckleDemo
dotnet build
dotnet add package Swashbuckle.AspNetCore --version 6.5.0
dotnet build
SHELL

Aqui, criamos um projeto de API Web chamado "SwashbuckleDemo" e, em seguida, instalamos o pacote Swashbuckle no projeto de API Web .NET Core usando o Console do Gerenciador de Pacotes.

Configurar Middleware Swagger

Configurar os serviços Swagger no arquivo Startup.cs.

using System.Reflection;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.AspNetCore.Builder;

public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        // Other service configurations...

        // Register the Swagger generator
        services.AddSwaggerGen(c =>
        {
            c.SwaggerDoc("v1", new OpenApiInfo { Title = "My API", Version = "v1" });

            // Optionally, include XML comments for additional information
            var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";
            var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile);
            c.IncludeXmlComments(xmlPath);
        });
    }

    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        // Other app configurations...

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

        // Enable Swagger UI (HTML, JS, CSS, etc.), specifying the Swagger JSON endpoint.
        app.UseSwaggerUI(c =>
        {
            c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1");
        });
    }
}

Adicionar um controlador para APIs de lista de tarefas:

using Microsoft.AspNetCore.Http.HttpResults;
using Microsoft.AspNetCore.Builder;
using Microsoft.EntityFrameworkCore;
using Microsoft.AspNetCore.Mvc;
using System.Threading.Tasks;

// Example to define an entity class
public class Todo
{
    public int Id { get; set; }
    public string Name { get; set; }
    public bool IsComplete { get; set; }
}

// Example to define a DbContext class
public class TodoDb : DbContext
{
    public DbSet<Todo> Todos => Set<Todo>();
}

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

app.MapGet("/", () => "SwashbuckleDemo!");

app.MapGet("/todoitems", async (TodoDb db) =>
    await db.Todos.ToListAsync());

app.MapGet("/todoitems/complete", async (TodoDb db) =>
    await db.Todos.Where(t => t.IsComplete).ToListAsync());

app.MapGet("/todoitems/{id}", async (int id, TodoDb db) =>
    await db.Todos.FindAsync(id) is Todo todo
        ? Results.Ok(todo)
        : Results.NotFound());

app.MapPost("/todoitems", async (Todo todo, TodoDb db) =>
{
    db.Todos.Add(todo);
    await db.SaveChangesAsync();
    return Results.Created($"/todoitems/{todo.Id}", todo);
});

app.MapPut("/todoitems/{id}", async (int id, Todo inputTodo, TodoDb db) =>
{
    var todo = await db.Todos.FindAsync(id);
    if (todo is null) return Results.NotFound();
    todo.Name = inputTodo.Name;
    todo.IsComplete = inputTodo.IsComplete;
    await db.SaveChangesAsync();
    return Results.NoContent();
});

app.MapDelete("/todoitems/{id}", async (int id, TodoDb db) =>
{
    if (await db.Todos.FindAsync(id) is Todo todo)
    {
        db.Todos.Remove(todo);
        await db.SaveChangesAsync();
        return Results.Ok(todo);
    }

    return Results.NotFound();
});

app.Run();

Também é possível adicionar um controlador, como mostrado abaixo:

using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using System.Collections.Generic;
using System;
using System.Linq;

namespace RestFullMinimalApi.Controllers
{
    [ApiController]
    [Route("[controller]")]
    public class WeatherForecastController : ControllerBase
    {
        private static readonly string[] Summaries = new[]
        {
            "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
        };

        private readonly ILogger<WeatherForecastController> _logger;

        public WeatherForecastController(ILogger<WeatherForecastController> logger)
        {
            _logger = logger;
        }

        /// <summary>
        /// Retrieves WeatherForecast
        /// </summary>
        /// <remarks>Awesomeness!</remarks>
        /// <response code="200">Retrieved</response>
        /// <response code="404">Not found</response>
        /// <response code="500">Oops! Can't lookup your request right now</response>
        [HttpGet(Name = "GetWeatherForecast")]
        public IEnumerable<WeatherForecast> Get()
        {
            return Enumerable.Range(1, 5).Select(index => new WeatherForecast
            {
                Date = DateTime.Now.AddDays(index),
                TemperatureC = Random.Shared.Next(-20, 55),
                Summary = Summaries[Random.Shared.Next(Summaries.Length)]
            })
            .ToArray();
        }
    }

    public class WeatherForecast
    {
        public DateTime Date { get; set; }
        public int TemperatureC { get; set; }
        public string Summary { get; set; }
    }
}

O código acima está disponível noGitHub - Demonstração do Swashbuckle .

Swashbuckle oferece os seguintes recursos

Ferramenta de interface do usuário Swagger

Swashbuckle ASP .NET Core (Como Funciona para Desenvolvedores): Figura 1 - Ferramenta Swagger UI

A interface do Swagger está disponível em "/swagger/index.html" a partir da URL base da aplicação Web API. A lista inclui todas as APIs REST presentes no código. O gerador Swagger lê o arquivo JSON e preenche a interface do usuário.

Swagger JSON

O Swashbuckle.AspNetCore gera automaticamente o arquivo JSON do Swagger, que contém informações sobre a estrutura da API, incluindo detalhes como endpoints, tipos de requisição e resposta, e muito mais. Este arquivo JSON pode ser usado por outras ferramentas e serviços que suportam o padrão Swagger/OpenAPI.

O arquivo JSON do Swagger está disponível em "/swagger/v1/swagger.json" na URL base da aplicação da API web.

Swashbuckle ASP .NET Core (Como Funciona para Desenvolvedores): Figura 2 - O arquivo JSON do swagger.

Anotações de código

Os desenvolvedores podem usar comentários e atributos XML em seus controladores ASP.NET Core para fornecer informações adicionais para a documentação Swagger. Isso inclui descrições, exemplos e outros metadados que aprimoram a documentação Swagger gerada.

[ApiController]
[Route("[controller]")]
public class WeatherForecastController : ControllerBase
{
    private static readonly string[] Summaries = new[]
    {
        "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
    };

    private readonly ILogger<WeatherForecastController> _logger;

    public WeatherForecastController(ILogger<WeatherForecastController> logger)
    {
        _logger = logger;
    }

    /// <summary>
    /// Retrieves WeatherForecast
    /// </summary>
    /// <remarks>Awesomeness!</remarks>
    /// <response code="200">Retrieved</response>
    /// <response code="404">Not found</response>
    /// <response code="500">Oops! Can't lookup your request right now</response>
    [HttpGet(Name = "GetWeatherForecast")]
    public IEnumerable<WeatherForecast> Get()
    {
        return Enumerable.Range(1, 5).Select(index => new WeatherForecast
        {
            Date = DateTime.Now.AddDays(index),
            TemperatureC = Random.Shared.Next(-20, 55),
            Summary = Summaries[Random.Shared.Next(Summaries.Length)]
        })
        .ToArray();
    }
}

Opções de configuração

O Swashbuckle.AspNetCore oferece diversas opções de configuração para personalizar a forma como a documentação Swagger é gerada. Os desenvolvedores podem controlar quais APIs são documentadas, configurar convenções de nomenclatura e ajustar outras configurações.

Aqui estão algumas das principais opções de configuração fornecidas pelo Swashbuckle.AspNetCore:

Opções do SwaggerGen

c.SwaggerDoc("v1", new OpenApiInfo { Title = "My API", Version = "v1" });

Esta linha especifica a versão do documento Swagger e inclui metadados como o título e a versão da sua API.

c.IncludeXmlComments(xmlPath);

Essa opção permite incluir comentários XML do seu código para fornecer informações adicionais na documentação Swagger. A variável xmlPath deve apontar para o local do seu arquivo de comentários em XML.

c.DescribeAllParametersInCamelCase();

Esta opção configura o gerador Swagger para usar camelCase nos nomes dos parâmetros.

c.OperationFilter<CustomOperationFilter>();

Você pode registrar filtros de operação personalizados para modificar a documentação Swagger de operações específicas. CustomOperationFilter é uma classe que implementa IOperationFilter.

Opções de interface do usuário Swagger

c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1");

Esta linha configura a interface do Swagger para exibir a documentação. O primeiro parâmetro é a URL do arquivo JSON do Swagger e o segundo parâmetro é um nome amigável para a versão da API.

c.RoutePrefix = "swagger";

Você pode definir o prefixo da rota para a interface do usuário do Swagger. Neste exemplo, a interface do Swagger estará disponível em /swagger.

c.DocExpansion(DocExpansion.None);

Esta opção controla como a interface do Swagger exibe a documentação da API. DocExpansion.None colapsa todas as operações por padrão.

Opções Swagger

c.SerializeAsV2 = true;

Esta opção especifica se deve serializar o documento Swagger no formato da versão 2.0 (true) ou no formato 3.0 (false). Defina como true se você quiser usar Swagger 2.0.

c.DisplayOperationId();

Essa opção exibe o ID da operação na interface do Swagger, o que pode ser útil para depurar e entender a estrutura da sua API.

c.OAuthClientId("swagger-ui");

Se sua API usa autenticação OAuth, você pode configurar o ID do cliente OAuth para a interface do usuário do Swagger.

Esses são apenas alguns exemplos das opções de configuração disponíveis. A biblioteca Swashbuckle.AspNetCore é altamente personalizável, e você pode adaptar a documentação Swagger para atender às suas necessidades específicas, combinando várias opções e filtros. Consulte sempre a documentação oficial ou o IntelliSense em seu ambiente de desenvolvimento para obter as informações mais atualizadas e completas sobre as opções disponíveis.

Apresentando o IronPDF

O IronPDF é uma biblioteca C# para PDF, disponível no site da Iron Software , que auxilia na leitura e geração de documentos PDF. Ele pode converter facilmente documentos formatados com informações de estilo para PDF. O IronPDF pode gerar PDFs a partir de conteúdo HTML sem esforço. Ele pode baixar o conteúdo HTML de um URL e, em seguida, gerar PDFs.

O IronPDF é uma ótima ferramenta para converter páginas da web, URLs e HTML em PDFs que replicam perfeitamente o original. É ideal para gerar PDFs de conteúdo online, como relatórios e faturas, e cria facilmente versões em PDF de qualquer página da web.

using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();

        // 1. Convert HTML String to PDF
        var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
        var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
        pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");

        // 2. Convert HTML File to PDF
        var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
        var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
        pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");

        // 3. Convert URL to PDF
        var url = "http://ironpdf.com"; // Specify the URL
        var pdfFromUrl = renderer.RenderUrlAsPdf(url);
        pdfFromUrl.SaveAs("URLToPDF.pdf");
    }
}

Instalação

Instale o IronPDF via NuGet usando os detalhes do Gerenciador de Pacotes NuGet ou o console do gerenciador de pacotes do Guia de Instalação do Visual Studio .

No console do gerenciador de pacotes, digite o comando:

PM > Install-Package IronPdf

Usando o Visual Studio

Swashbuckle ASP .NET Core (Como funciona para o desenvolvedor): Figura 3 - Abra seu projeto no Visual Studio. Acesse o menu "Ferramentas", selecione "Gerenciador de Pacotes NuGet " e, em seguida, selecione "Gerenciar Pacotes NuGet para a Solução". Na interface do Gerenciador de Pacotes NuGet, procure o pacote "IronPDF" na guia Procurar. Em seguida, selecione e instale a versão mais recente do IronPDF.

Agora, vamos modificar nosso aplicativo para adicionar a funcionalidade de baixar o conteúdo do site como um arquivo PDF.

using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using IronPdf;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;

namespace RestFullMinimalApi.Controllers
{
    [ApiController]
    [Route("[controller]")]
    public class WeatherForecastController : ControllerBase
    {
        private static readonly string[] Summaries = new[]
        {
            "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
        };

        private readonly ILogger<WeatherForecastController> _logger;

        public WeatherForecastController(ILogger<WeatherForecastController> logger)
        {
            _logger = logger;
        }

        /// <summary>
        /// Retrieves WeatherForecast
        /// </summary>
        /// <remarks>Awesomeness!</remarks>
        /// <response code="200">Retrieved</response>
        /// <response code="404">Not found</response>
        /// <response code="500">Oops! Can't lookup your request right now</response>
        [HttpGet(Name = "GetWeatherForecast")]
        public IEnumerable<WeatherForecast> Get()
        {
            return Enumerable.Range(1, 5).Select(index => new WeatherForecast
            {
                Date = DateTime.Now.AddDays(index),
                TemperatureC = Random.Shared.Next(-20, 55),
                Summary = Summaries[Random.Shared.Next(Summaries.Length)]
            })
            .ToArray();
        }

        /// <summary>
        /// Retrieves WeatherForecast as Pdf
        /// </summary>
        /// <remarks>Awesomeness!</remarks>
        /// <response code="200">Retrieved</response>
        /// <response code="404">Not found</response>
        /// <response code="500">Oops! Can't lookup your request right now</response>
        [HttpGet("download", Name = "DownloadWeatherForecast")]
        public IActionResult GetWeatherPdf()
        {
            var results = Enumerable.Range(1, 5).Select(index => new WeatherForecast
            {
                Date = DateTime.Now.AddDays(index),
                TemperatureC = Random.Shared.Next(-20, 55),
                Summary = Summaries[Random.Shared.Next(Summaries.Length)]
            }).ToArray();

            var html = GetHtml(results);
            var renderer = new ChromePdfRenderer();
            var pdf = renderer.RenderHtmlAsPdf(html);
            var fileName = "WeatherReport.pdf";
            pdf.SaveAs(fileName);

            var stream = new FileStream(fileName, FileMode.Open);
            // Return the PDF file for download
            return new FileStreamResult(stream, "application/octet-stream") { FileDownloadName = fileName };
        }

        private static string GetHtml(WeatherForecast[] weatherForecasts)
        {
            string header = @"
<html>
<head><title>WeatherForecast</title></head>
<body>
<h1>WeatherForecast</h1>
";

            var footer = @"
</body>
</html>";

            var htmlContent = header;
            foreach (var weather in weatherForecasts)
            {
                htmlContent += $@"
    <h2>{weather.Date}</h2>
    <p>Summary: {weather.Summary}</p>
    <p>Temperature in Celsius: {weather.TemperatureC}</p>
    <p>Temperature in Fahrenheit: {weather.TemperatureF}</p>
";
            }
            htmlContent += footer;
            return htmlContent;
        }
    }

    public class WeatherForecast
    {
        public DateTime Date { get; set; }
        public int TemperatureC { get; set; }
        public string Summary { get; set; }
        
        public int TemperatureF => 32 + (int)(TemperatureC / 0.5556);
    }
}

Aqui, utilizamos os dados meteorológicos para gerar uma string HTML, que é então usada para criar um documento PDF.

Conteúdo HTML

Swashbuckle ASP .NET Core (Como Funciona para Desenvolvedores): Figura 4 - Conteúdo HTML para Previsão do Tempo.

E o relatório em PDF tem este aspecto:

Swashbuckle ASP .NET Core (Como Funciona para Desenvolvedores): Figura 5 - Arquivo de saída de HTML para PDF: WeatherReport.pdf

O código completo pode ser encontrado no GitHub - Código-fonte da demonstração do Swashbuckle .
O documento possui uma pequena marca d'água para licenças de teste, removível mediante apresentação de uma licença válida.

Licenciamento (Teste Gratuito Disponível)

Para que o código acima funcione, é necessária uma chave de licença. Coloque esta chave no arquivo appsettings.json.

{
    "IronPdf": {
        "LicenseKey": "your license key"
    }
}
JSON

Uma licença de avaliação está disponível para desenvolvedores mediante cadastro no IronPDF Trial Registration . Não é necessário cartão de crédito para obter uma licença de teste. Cadastre-se com seu endereço de e-mail para obter um teste gratuito.

Conclusão

Compreender o Swashbuckle e o IronPDF permite integrar de forma eficaz a documentação de API e os recursos de geração de PDF em suas aplicações ASP.NET Core . O IronPDF também oferece documentação completa para primeiros passos , juntamente com vários exemplos de código para geração de PDFs .

Além disso, você pode explorar produtos de software relacionados da Iron Software que o ajudarão a aprimorar suas habilidades de programação e a atender aos requisitos de aplicativos modernos.

Curtis Chau
Redator Técnico

Curtis Chau é bacharel em Ciência da Computação (Universidade Carleton) e se especializa em desenvolvimento front-end, com experiência em Node.js, TypeScript, JavaScript e React. Apaixonado por criar interfaces de usuário intuitivas e esteticamente agradáveis, Curtis gosta de trabalhar com frameworks modernos e criar manuais bem estruturados e visualmente atraentes.

...
Leia mais

Artigos relacionados

Key in blue circle

Obtenha sua chave de avaliação gratuita de 30 dias instantaneamente.

Your trial license will be sent to your email address

Sem limitações. 100% desbloqueado. Sem cartão de crédito.

bullet_checkedNão é necessário cartão de crédito nem criação de conta.Sem limitações. 100% desbloqueado. Sem cartão de crédito.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Agende sua demonstração ao vivo gratuita.
Booking Badge

Aprovado por milhões de engenheiros em todo o mundo.

Logotipos dos clientes da Iron Software
Agende sua consulta sem compromisso.
Preencha o formulário abaixo ou envie um e-mail para sales@ironsoftware.com
Os seus dados serão sempre mantidos em sigilo.
Aprovado por milhões de engenheiros em todo o mundo.
Logotipos dos clientes da Iron Software
Obtenha sua chave de avaliação gratuita de 30 dias instantaneamente.
Não é necessário cartão de crédito nem criação de conta.