Nas versões antigas do .NET, as configurações da aplicação ficavam em arquivos como web.config ou app.config, escritos em XML. Esse formato era bastante detalhado, mas também verboso e de difícil leitura, o que tornava a manutenção mais trabalhosa.

Com o .NET, a Microsoft reformulou a forma de lidar com configurações e adotou o JSON como padrão, dando origem ao appsettings.json. O JSON é mais simples, leve e fácil de ler, além de ser amplamente usado em integrações modernas.

Sempre que você cria um novo projeto ASP.NET, um arquivo appsettings.json é gerado automaticamente. Ele concentra informações como strings de conexão, chaves de API, configurações de log, entre outras.

Importante: apesar de o JSON ser o padrão, o .NET também suporta arquivos XML e INI, garantindo flexibilidade.

Nas primeiras versões do ASP.NET, a leitura do arquivo era configurada manualmente no Startup.cs. Hoje, esse processo já vem pronto através do método WebHost.CreateDefaultBuilder(args), definido no Program.cs, simplificando bastante o setup da aplicação.

Os detalhes importam

Veja como o WebHost cria a configuração:

Antes de entendermos como o appsettings.json é montado, é importante observar alguns pontos essenciais.

A variável env.EnvironmentName recebe o valor definido na variável de ambiente ASPNETCORE_ENVIRONMENT. Esse valor pode ser alterado de duas formas:

  • No arquivo launchSettings.json, localizado na pasta Properties.
  • Diretamente no ambiente do sistema operacional.

Windows

Se essa variável estiver definida como Development, o .NET carregará automaticamente as configurações armazenadas em User Secrets. Por fim, também serão aplicadas as configurações adicionais que podem ser passadas na inicialização do projeto.

layers

As camadas

O AppSettings no .NET é construído em camadas (layers). Essas camadas são carregadas em sequência, pois o WebHost já vem configurado para isso por padrão.

A ordem padrão de carregamento é:

  1. O arquivo appsettings.json, localizado na raiz do projeto.
  2. O arquivo específico para o ambiente, por exemplo: appsettings.{Environment}.json.
  3. User Secrets (apenas quando o ambiente é Development).
  4. Variáveis de ambiente do sistema operacional.
  5. Argumentos passados na inicialização via linha de comando.

Essa ordem garante que configurações mais específicas sobrescrevam as anteriores. Embora seja possível alterar a ordem de carregamento conforme a necessidade do projeto, na prática é muito raro encontrar sistemas que façam essa modificação.

Níveis

O AppSettings funciona de forma hierárquica. Isso significa que, conforme as camadas são carregadas, os valores podem ser sobrescritos pelas configurações mais específicas.

Appsettings

Esse comportamento é especialmente útil para trabalhar com múltiplos ambientes (Development, Staging, Production). Assim, você pode manter valores padrão no appsettings.json e customizar apenas o que for necessário em cada ambiente.

Exemplo prático

No arquivo appsettings.json (configuração base):

{
  "ConnectionStrings": {
    "DefaultConnection": "Server=localhost;Database=MinhaApp;User Id=sa;Password=12345;"
  },
  "Logging": {
    "LogLevel": {
      "Default": "Information"
    }
  }
}

No arquivo appsettings.Development.json (sobrescrevendo apenas o necessário):

{
  "ConnectionStrings": {
    "DefaultConnection": "Server=localhost;Database=MinhaAppDev;User Id=dev;Password=dev123;"
  },
  "Logging": {
    "LogLevel": {
      "Default": "Debug"
    }
  }
}

Resultado: quando a aplicação roda no ambiente Development, ela usa a connection string e o nível de log definidos no appsettings.Development.json, substituindo os valores do arquivo base.

User Secrets

O User Secrets é um recurso do .NET que permite armazenar informações sensíveis (como strings de conexão, tokens de API e senhas) fora do projeto. Assim, esses dados não ficam visíveis no código nem entram no controle de versão (Git, por exemplo), permanecendo apenas na máquina local do desenvolvedor.


Configurando o User Secrets

Se você estiver usando o Visual Studio, pode habilitar o User Secrets facilmente:

  • Clique com o botão direito no projeto.
  • Selecione a opção Manage User Secrets.

usersecrets

Quando configurado, o .NET cria um arquivo JSON na sua máquina, no caminho:

%USERPROFILE%\AppData\Roaming\Microsoft\UserSecrets\

Além disso, o Visual Studio adiciona automaticamente ao arquivo .csproj uma chave de identificação única:

<UserSecretsId>xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx</UserSecretsId>

csproj


Reaproveitando em vários projetos

Como o arquivo fica armazenado localmente, é possível reutilizar os mesmos segredos em diferentes projetos. Para isso, basta copiar o mesmo <UserSecretsId> para o arquivo .csproj de outro projeto:

<UserSecretsId>xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx</UserSecretsId>

Exemplo prático

Suponha que você tenha configurado o seguinte conteúdo no seu User Secrets:

{
  "ConnectionStrings": {
    "DefaultConnection": "Server=localhost;Database=MinhaApp;User Id=sa;Password=12345;"
  },
  "ApiKeys": {
    "SendGrid": "SG.xxxxx-xxxx-xxxx"
  }
}

No código, você pode acessar esses valores usando a injeção de IConfiguration:

public class HomeController : Controller
{
    private readonly IConfiguration _configuration;

    public HomeController(IConfiguration configuration)
    {
        _configuration = configuration;
    }

    public IActionResult Index()
    {
        // Lendo uma connection string
        var connectionString = _configuration.GetConnectionString("DefaultConnection");

        // Lendo uma chave de API
        var sendGridKey = _configuration["ApiKeys:SendGrid"];

        ViewBag.Message = $"Conn: {connectionString} | Key: {sendGridKey}";
        return View();
    }
}

Dessa forma, você mantém as informações sensíveis fora do repositório e ainda consegue acessá-las de maneira simples dentro da aplicação.

Variáveis de Ambiente

O ASP.NET utiliza a variável de ambiente ASPNETCORE_ENVIRONMENT para identificar em qual ambiente a aplicação está sendo executada. Os valores mais comuns são:

  • Development
  • Staging
  • Production

🔎 Embora você possa definir qualquer valor, é recomendado seguir esse padrão para manter consistência.

⚠️ Atenção: no Windows e macOS os valores não diferenciam maiúsculas de minúsculas, mas no Linux diferenciam. Isso pode causar problemas difíceis de identificar, então fique atento.


Alterando no Visual Studio

Dentro do Visual Studio, você pode configurar variáveis de ambiente em: Propriedades do projeto > Debug.

debugsection


Sobrescrevendo configurações do appsettings.json

Uma característica poderosa do ASP.NET é que variáveis de ambiente sobrescrevem as configurações do appsettings.json.

Exemplo de appsettings.json:

Para sobrescrever uma dessas configurações, basta criar uma variável de ambiente equivalente:

newenvvar envvars

Assim, quando a aplicação for iniciada, o valor da variável de ambiente substituirá o definido no arquivo appsettings.json.

👉 Para quem vem de uma stack Microsoft tradicional, isso pode parecer estranho no começo. Mas na prática, torna-se extremamente útil em ambientes modernos, principalmente em containers e cloud.


Docker

No Docker, as variáveis de ambiente podem ser definidas de duas formas:

Dockerfile

docker-compose


Azure App Service

No Azure App Service, a configuração também é simples: Acesse App Services > Seu App Service > Configuration.

azureappsettings-1

love

Alterando Subníveis

Normalmente, os arquivos appsettings.json são bem mais complexos do que exemplos de primeiro nível. É comum encontrar estruturas aninhadas com vários subníveis de configuração.

Considere o exemplo abaixo:

A seguir veremos como sobrescrever a chave 3rdLevel em diferentes ambientes.


Docker

Para acessar subníveis dentro de variáveis de ambiente no Docker, utiliza-se o : (dois pontos) como separador.

docker-compose

Dockerfile

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

Azure App Service

Aqui está o ponto que mais exige atenção: o comportamento muda de acordo com o sistema operacional em que o App Service está rodando.

webapp

Windows

No App Service rodando em Windows, a sintaxe é a mesma do Docker: use : (dois pontos) como separador.

Azureadding configurationChanged-1

Linux

Já no Linux, variáveis de ambiente não aceitam : (dois pontos). Nesse caso, é necessário usar __ (dois underlines) como separador.

ApplicationSettings__OneMoreLevel__3rdLevel=Changed!

configurationChanged_linux

Bônus

Em alguns casos, as configurações de variáveis de ambiente no Azure App Service podem não se comportar como esperado — às vezes parecem até “bugadas”. Uma forma prática de debugar esse tipo de situação é consultar diretamente todas as variáveis de ambiente que o App Service está carregando.


Acessando via Kudu

Para visualizar as variáveis:

  1. Vá até App Service > Seu App Service > Advanced Tools > Go.

advancedTools

  1. O Kudu será aberto em uma nova aba.
  2. No menu superior, selecione a opção Environment.

kudu


Dessa forma, você terá acesso a todas as variáveis de ambiente realmente carregadas pelo App Service, permitindo confirmar se os valores definidos na Configuration foram aplicados corretamente.

Referências