É possivel sobescrever as configurações do appsettings.json através do painel Configuração do AppService do Azure.

Sabia que se o AppService for Linux para subniveis de configuração deve usar __ ao invés de :?

Neste artigo será abordado os niveís de configuração do appSettings.json e como aproveitar para melhorar a instrumentalização da tua aplicação.

I’ve got a special place for cool coffee shop menus…

O appSettings

O AppSettings.json é o arquivo de configuração do .NET Core. Se você trabalhou com as versões anteriores do .NET provavelmente está habituado ao web.config ou app.config.

Era um XML com diversas configurações da tua aplicação.

O .NET Core foi reescrito e com ele introduzido o arquivo de configuração no formato JSON.

Ao criar um site ASP.NET Core é criado um arquivo chamado appsettings.json.

O appsettings.json substitui as configurações localizadas anteriormente no web.config. O .NET Core suporta arquivos JSON, XML e ini.

Nas primeiras versões do ASP.NET Core a configuração era feita no arquivo Startup.cs. Nas novas versões esta configuração está imbutida no método WebHost.CreateDefaultBuilder(args) no Progam.cs

Os detalhes importam

Veja como o WebHost cria a configuração:

Antes de explicar como o AppSettings é montado. Aos detalhes mais importante.

A variável env.EnvironmentName vai conter o valor que foi setado na EnvironmentVariable ASPNETCORE_ENVIRONMENT. Essa pode ser alterado no arquivo launchSettings.json na pasta Properties. Ou no próprio ambiente:

Windows

Se essa váriavel tiver o valor Development. Então vai carregar o User Secrets. Por fim carrega as configurações que podem ser passados na inicialização do projeto.

As camadas

O AppSettings é construido em Layers. Geralmente segue esta sequencia, pois é auto-configurado no WebHost.

  1. A arquivo appsettings.json que está na pasta raiz do projeto.
  2. O arquivo na raiz concatenado com .{VARIAVEL_DE_AMBIENTE}.json
  3. User Secrets
  4. Váriaveis de ambiente
  5. Váriaveis dos argumentos passados na inicialização via linha de comando.

A ordem pode ser alterado, de acordo com a necessidade do desenvolvedor e projeto. Nunca vi um projeto fazendo uma alteração nessa ordem.

Niveis

O AppSettings é criado de forma hierárquica. Conforme as camadas são adicionadas, eventualmente, pode sobescrever as chaves da camada atual.

Appsettings

Dessa forma seu aplicativo pode ter uma configuração diferente para cada ambiente. É possivel explorar as diversas configurações para cada um dos ambientes em que a app é executada.

User Secrets

O User Secrets permite guardar informações sensíveis sem a necessidade de colocar no projeto. Dessa forma o arquivo fica fora do controle de versões. Apenas na maquina do desenvolvedor.

Configurando o User Secrets

Se você estiver usando o Visual Studio para adicionar o User Secrets basta clicar com o botão direito do mouse no projeto e selecionar a opçãos Manage User Secrets.
usersecrets

O arquivo será salvo na máquina local. O caminho será %USERPROFILE%\AppData\Roaming\Microsoft\UserSecrets\. Além disso será adicionado uma chave no arquivo csproj.

csproj

Pode ser utilizado por vários projetos

Como é um arquivo local, você pode reaproveitar o User Secrets em outros projetos. Para isso basta adicionar a mesma chave <UserSecretsId>id</UserSecretsId> no csproj.

Váriaveis de ambiente

O ASP.NET Core usa uma variável de ambiente chamada ASPNETCORE_ENVIRONMENT para indicar o ambiente. O valor pode ser qualquer coisa. Por default seu valor é Development, Staging ou Production.

O valor não diferencia maiúsculas de minúsculas no Windows e Mac OS, mas diferencia maiúsculas de minúsculas no Linux. E isso pode gerar um baita mal estar. Então tome cuidado.

Dentro do Visual Studio, é possivel alterar o valor das variáveis de ambiente. Em propriedado do projeto > Debug.

debugsection.

Além disso a Váriavel de Ambiente substitui as configurações do appSettings.json. ISSO mesmo!

Suponha que você tem o seguinte appSettings.config:

Para sobescrever essa configuração é necessário adicionar uma váriavel de ambiente:

newenvvar
envvars

Assim quando sua aplicação carregar, a variável de ambiente vai substituir a váriavel que está no appSettings.json.

Se você vem de uma stack Microsoft, inicialmente essa configuração pode parecer estranho. Mas essa possibilidade vai se demonstrar extremamente útil em outros ambientes.

Docker

É possivel setar as váriaveis de ambiente através do DOCKERFILE ou no Compose.

Dockerfile:

Compose:

Azure AppService

Para modificar as váriaveis vá em App Services > Seu App Service > Configuration.

azureappsettings-1

Heart shape during sunset

Alterando os subniveis

É normal que os appSettings.json sejam mais complexos do que apenas o primeiro nível como foi demonstrado nesse exemplos acima.

Considere a seguinte configuração.

Abaixo será exibido como alterar a chave 3rdLevel em diversos ambientes.

Docker

Para navegar e especificar o nível que quer chegar utilize o : (Dois pontos) tanto no compose quanto no dockerfile.

Compose

Dockerfile

ENV ApplicationSettings:OneMoreLevel:3rdLevel: "Changed!"

Azure AppService

Aqui é o maior ponto de atenção. No Docker essa configuração depende do sistema operacional do AppService.

webapp

Windows

Na máquina Windows é igual ao docker. Utilizando o : (dois pontos).

Azureadding

configurationChanged-1

Linux

Já para máquinas linux, a configuração não aceita :. Por isso é necessário alterar para __ (Dois underlines).

configurationChanged_linux

Bonus

Consultando todas as váriaveis de ambiente do Azure AppService. Algumas vezes as configuração não funcionam. Parecem estar com bug. Essa dica pode ser útil para aqueles que estão tentando debugar.

É possivel visualizar todas as váriaveis de ambiente de um AppService. Para isso abra o Kudu:

AppService > Seu App Service > Advanced Tools > Go

advancedTools

Assim que abrir, vá na opção Environment:

kudu

Conclusão

Espero que tenham gostado desse artigo. Não há muitas referências, pois grande parte do conteúdo foi baseado nas minhas feridas do campo de batalha.

Referências