ASP.NET Core 3.0 + Swagger: novidades e exemplos
Ao me preparar para uma apresentação recente notei que a versão estável do pacote Swashbuckle.AspNetCore (atualmente a 4.0.1) não possuía compatibilidade com o ASP.NET Core 3.0. Como é de conhecimento geral, aplicações Web baseadas no .NET Core 3.0 vêm configuradas por default para utilizar recursos do namespace System.Text.Json (este último com novas estruturas mais performáticas voltadas à manipulação de dados JSON). Essa alteração acabou por gerar incompatibilidades, já que versões anteriores de Swashbuckle.AspNetCore dependem do package Newtonsoft.Json.
Aproveito este espaço para deixar aqui também um convite. Entre os dias 2 e 4 de Dezembro/2019 acontecerá o DevWeek 2019, o evento de final de ano do Canal .NET voltado a desenvolvedores de software.
Serão 9 palestras noturnas, gratuitas e online ao longo de 3 dias, cobrindo diversas tecnologias e temas de destaque na área de software (sobretudo .NET e Microsoft Azure).
Para efetuar sua inscrição acesse este link e faça sua inscrição pelo Meetup, a transmissão será via YouTube e a grade será divulgada em breve.
Consultando alguns fóruns e o próprio Microsoft Docs sobre a integração com o Swagger, a recomendação no momento da publicação deste artigo é que se use a versão 5.0.0-rc4 do package Swashbuckle.AspNetCore.
Ao adotar essa recomendação algumas alterações também serão necessárias no código. O exemplo a seguir demonstra como configurar na classe Startup a utilização do Swagger em uma API REST criada com o ASP.NET Core 2.2:
Com a versão mais recente de Swashbuckle.AspNetCore será necessário que nos atentemos às seguintes mudanças:
- Substituir o namespace Swashbuckle.AspNetCore.Swagger por Microsoft.OpenApi.Models;
- As classes OpenApiInfo e OpenApiContact (em uso no método ConfigureServices) entram no lugar dos tipos Info e Contact, respectivamente;
- A propriedade Url de OpenApiContact foi preenchida com uma instância da classe Uri (namespace System).
Ao executar uma aplicação com a UI do Swagger habilitada será possível notar também algumas diferenças, como indicado na imagem a seguir:
O projeto que serviu de base para esse artigo já está no GitHub:
https://github.com/renatogroffe/ASPNETCore3.0_Swagger-Dapper/
Demonstrei ainda o uso do Swagger em um segundo projeto ASP.NET Core 3.0:
https://github.com/renatogroffe/ASPNETCore3.0_Swagger-EFInMemory