ASP.NET Core: definindo o ambiente de execução via dotnet run
Ao testarmos a execução de nossas aplicações ASP.NET Core via linha de comando temos também a possibilidade de simular diferentes ambientes, possibilitando assim avaliar o comportamento esperado de um deployment em Staging ou Produção. Mas pensando em termos práticos, por que faríamos isso?
É extremamente comum que ativemos middlewares e opções de configuração apenas para ambientes de Desenvolvimento, já que habilitar tais recursos em Produção significaria expor detalhes quase sempre indesejáveis (fornecendo inclusive dados e meios para eventuais ataques).
Para selecionar o tipo de ambiente a ser empregado na execução de uma aplicação com o .NET CLI (Command-line interface) devemos utilizar a opção --environment:
dotnet run --environment=<NOME DO AMBIENTE>
Em que <NOME DO AMBIENTE> poderá ser um valor como Development, Staging ou Production.
Tomando como exemplo a listagem a seguir, em que se configurou o uso da solução MiniProfiler para logging de requisições e instruções SQL geradas por uma API REST construída com .NET 6 + ASP.NET Core:
- A chamada ao método IsDevelopment de IWebHostEnvironment na linha 5 permite determinar se estamos em um ambiente de Desenvolvimento ou não. Temos como alternativas os métodos IsProduction e IsStaging;
- Na sequência temos 2 verificações (linhas 21 e 27) habilitando ou não o uso do MiniProfiler.
Caso tenha interesse em conhecer mais a respeito, já demostrei o uso do MiniProfiler com o exemplo desta listagem no seguinte artigo:
MiniProfiler + Dapper + Entity Framework: logando instruções SQL em um projeto ASP.NET Core
Ao executar a aplicação apenas com a instrução dotnet run veremos mensagens de log indicando que o MiniProfiler foi configurado e seu middleware ativado:
Repetindo o mesmo procedimento com a instrução:
dotnet run --environment=Development
Teremos um resultado idêntico:
Já simulando um ambiente de Staging com a instrução:
dotnet run --environment=Staging
Ou de Produção (Production) com a instrução:
dotnet run --environment=Production
É possível notar que em ambas as situações o uso do MiniProfiler foi desabilitado.