Atualizando Swagger da versão 8 para a 10
Manter pacotes nuget atualizados é uma tarefa meio que entediante, repetitiva e muitas vezes dá muita dor de cabeça por conta de breaking changes e dependencias de outros pacotes. Mas infelizmente é uma tarefa necessária por conta de segurança e atualizações sistemicas.
Se você chegou até este post então o swagger não é novidade para você, por isso, nem vou entrar nos detalhes deste pacote, afinal, um bom google ou qualquer IA pode explicar isso de forma rápida. O objetivo do post aqui é mostrar como fazer a atualização da versão 8 do swagger para a 10, pois, houve breaking changes e alguns namespaces foram atualizados e classes como OpenApiReference não estão mais disponíveis.
Quando precisei fazer a atualização não encontrei algo prático que mostrasse onde houve atualizações, então resolvi colocar isso em um post porque além de precisar com frequencia pode ajudar outras pessoas.
Se o seu projeto está utilizando dotnet core provavelmente você tem alguns destes pacotes instalados:
– Asp.Versioning.Mvc.ApiExplorer
– Swashbuckle.AspNetCore
– Swashbuckle.AspNetCore.Annotations
– Swashbuckle.AspNetCore.SwaggerGen
Aqui está a configuração do swagger antes da atualização feita no arquivo Program.cs
using Microsoft.OpenApi.Models;
builder.Services.AddSwaggerGen(option =>
{
option.SwaggerDoc("v1", new OpenApiInfo { Title = "Swagger API Title", Version = "v1" });
option.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme
{
In = ParameterLocation.Header,
Description = "",
Name = "Authorization",
Type = SecuritySchemeType.Http,
BearerFormat = "JWT",
Scheme = "Bearer"
});
option.AddSecurityRequirement(new OpenApiSecurityRequirement
{
{
new OpenApiSecurityScheme
{
Reference = new OpenApiReference
{
Type=ReferenceType.SecurityScheme,
Id="Bearer"
}
},
Array.Empty<string>()
}
});
});
var app = builder.Build();
app.UseSwagger();
app.UseSwaggerUI();
Ao atualizar os pacotes para a última versão alguns namespaces como Microsoft.OpenApi.Models não estão mais disponíveis e algumas classes de configuração tiveram alterações como a OpenApiSecurityScheme. Isso exige alterar a configuração do swagger no Program.cs que ficou assim:
using Microsoft.OpenApi;
builder.Services.AddSwaggerGen(option =>
{
option.SwaggerDoc("v1", new OpenApiInfo { Title = "Swagger API Title", Version = "v1" });
option.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme
{
In = ParameterLocation.Header,
Description = "Please enter a valid token",
Name = "Authorization",
Type = SecuritySchemeType.Http,
BearerFormat = "JWT",
Scheme = "Bearer"
});
option.AddSecurityRequirement(document => new OpenApiSecurityRequirement
{
[new OpenApiSecuritySchemeReference("Bearer", document)] = []
});
});
var app = builder.Build();
app.UseSwagger();
app.UseSwaggerUI();
Como pode-se notar o método AddSecurityRequirement agora é configurado de forma diferente e apenas com estas alterações você já consegue compilar o seu projeto e deixar tudo rodando.
Lembrando que esta é uma configuração básica que é utilizada em muitos projetos que não requerem muita customização. Esse código pode servir de base para você mesmo se o seu projeto possui configurações mais avançadas.