ASP.NET Core: dicas úteis para o dia a dia de um Desenvolvedor - Parte 7
Neste post dou continuidade à série de dicas úteis para o dia a dia de Desenvolvedores ASP.NET Core. Até o momento foram publicados 7 artigos com dezenas de dicas. Caso ainda não tenha consultado os 6 posts anteriores ou, até mesmo, gostaria de revê-los acesse os links a seguir:
ASP.NET Core: dicas úteis para o dia a dia de um Desenvolvedor — Parte 1
ASP.NET Core: dicas úteis para o dia a dia de um Desenvolvedor — Parte 2
ASP.NET Core: dicas úteis para o dia a dia de um Desenvolvedor — Parte 3
ASP.NET Core: dicas úteis para o dia a dia de um Desenvolvedor — Parte 4
ASP.NET Core: dicas úteis para o dia a dia de um Desenvolvedor — Parte 5
ASP.NET Core: dicas úteis para o dia a dia de um Desenvolvedor — Parte 6
Aproveito este espaço para deixar aqui também um convite. Nos meses de Fevereiro e Março/2020 acontecerá o Azure Tech Nights, evento online e gratuito promovido pelo Canal .NET com foco em tecnologias e serviços que integram a nuvem Microsoft.
Para participar do primeiro dia de apresentações acesse este link e faça sua inscrição pelo Meetup, a transmissão será via YouTube e a grade será divulgada em breve.
Azure DevOps + Docker: automatizando o build e deployment de aplicações containerizadas
Inúmeras são as vantagens decorrentes da adoção de containers Docker em projetos Web, merecendo destaque fatores como uma menor dependência do ambiente, maior rapidez no deployment e a possibilidade de se escalar com grande velocidade uma aplicação. Plataformas como Azure DevOps não ficaram alheias a isto, contando com total suporte a Docker e possibilitando que o build e o deployment de aplicações aconteçam sem a necessidade da instalação de SDKs e runtimes (para isto será necessário apenas um arquivo Dockerfile devidamente configurado).
No artigo a seguir demonstro como efetuar de maneira automatizada o build e o deployment de uma aplicação ASP.NET Core 3.1 através do Azure DevOps, fazendo uso para isto de Docker, do Azure Container Registry (como repositório das imagens geradas) e do Azure (para hospedagem dos containers do projeto em questão):
Docker + Azure DevOps: build e deployment automatizado de aplicações
Abordei também este assunto em uma live recente do Canal .NET, em que vocês poderão encontrar passo a passo a configuração de um pipeline baseado em Azure DevOps + ASP.NET Core 3.1 + Docker + Azure Container Registry + Azure Web App for Containers:
Alterando a porta para execução de uma aplicação via dotnet run
Desenvolvedores habituados com a criação de projetos ASP.NET Core através da linha de comando sabem que, por default, uma nova aplicação estará configurada para execução nas portas 5001 e 5000 (esta última redirecionando para 5001).
E se a nova aplicação em questão for uma API REST, por exemplo, com o consumo da mesma acontecendo em outro projeto já executando localmente na porta 5001?
Alterar a aplicação para execução em uma porta diferente via instrução dotnet run é uma tarefa extremamente simples. Teremos que modificar o arquivo launchSettings.json, presente no diretório Properties do projeto em questão:
Na listagem a seguir temos o conteúdo gerado automaticamente para o arquivo launchSettings.json:
Na seção com o mesmo nome da aplicação (APIExemplo - a partir da linha 20) estará um item de configuração chamado applicationUrl (linha 24); alterar as portas 5001 e 5000 para 6001 e 6000, respectivamente:
A execução da aplicação a partir da linha de comando com a instrução dotnet run mostrará que as portas acessíveis são a 6001 e 6000:
Alterando a porta para execução de uma aplicação a partir do Visual Studio Code
O ajuste efetuado na seção anterior também é válido para a execução de aplicações através do Visual Studio Code. Entretanto, temos ainda a possibilidade de configurar portas específicas para executar um projeto por meio deste editor de código.
Ao abrir um novo projeto com esta ferramenta será exibida a mensagem destacada em vermelho na próxima imagem:
Acionando a opção Yes serão criados os arquivos launch.json e tasks.json na pasta .vscode, com os mesmos contendo configurações para o build e debugging de um projeto por meio do VS Code:
Na listagem a seguir temos o conteúdo do arquivo launch.json gerado pelo VS Code:
Precisaremos incluir na seção env (a partir da linha 22) o item ASPNETCORE_URLS, no qual serão relacionadas as portas 7001 (HTTPS) e 7000 (HTTP):
Ao executar novamente a aplicação no Visual Studio Code será possível notar que as portas para acesso à mesma são a 7001 e 7000:
JWT + Refresh Tokens em ASP.NET Core: implementando e consumindo
A adoção de JWT (JSON Web Tokens) representa um dos principais meios para se proteger o acesso a APIs REST. O fato de um token contar com um tempo de validade pré-determinado, no entanto, pode se revelar como uma limitação em algumas situações. Expirado tal token um novo deverá ser gerado, a fim de possibilitar que se continue a interação com os recursos providos por uma API.
Soluções para contornar este comportamento existem e envolvem o uso de Refresh Tokens:
- Um valor adicional (um segundo token) será gerado, a fim de permitir a solicitação posterior de um novo token de acesso atualizado;
- Este procedimento dispensa a necessidade de se repetir todo o processo de autenticação que aconteceu durante a obtenção do token inicial, contribuindo assim para uma maior performance.
Abordei recentemente a implementação de JWT e Refresh Tokens com ASP.NET Core 3.1 no seguinte post:
ASP.NET Core 3.1 + JWT + Refresh Tokens: exemplo de implementação
Já o consumo da API REST apresentada em tal post (considerando inclusive o tratamento de tokens expirados e uso de Refresh Tokens) foi detalhado no artigo a seguir:
.NET Core + Polly + JWT: tratando de forma resiliente a expiração de tokens
OBSERVAÇÃO: Os 2 artigos mencionados nesta seção incluem exemplos disponibilizados no GitHub, bem como links para outros artigos abordando a utilização de JWT e vídeos.
Visual Studio 2019 + Debugging: pesquisando o conteúdo de objetos de maneira rápida e eficiente
Uma das grandes novidades do Visual Studio 2019 é a funcionalidade que permite a pesquisa do conteúdo de objetos durante o debugging de uma aplicação. Trata-se de um recurso extremamente útil, sobretudo se considerarmos a dificuldade tentando localizar um item (uma propriedade por seu nome) ou um valor específico numa instância com uma estrutura mais complexa ou, até mesmo, em uma coleção de objetos.
Na próxima imagem podemos observar esta função em ação durante a pesquisa de valores em uma coleção:
O projeto que utilizei como base neste exemplo está no GitHub:
https://github.com/renatogroffe/ASPNETCore3.0_JsonSerializerOptions
Abordei em detalhes este novo recurso do Visual Studio 2019 no seguinte artigo:
Visual Studio 2019 + Debugging: pesquisando o conteúdo de objetos de maneira rápida e eficiente
E também em uma live recente do Canal .NET: