appsettings.json
Quando você cria um projeto no ASP.NET Core, vem um arquivo chamado appsettings.json
. Ele é mais simples do que o antigo e complicado web.config que a Microsoft usava. Apesar de o ASP.NET Core suportar JSON, XML e ini, JSON é o preferido.
No passado, tudo era configurado no Startup.cs, mas no .NET 6, isso foi simplificado no Program.cs com este comando:
var builder = WebApplication.CreateBuilder(args);
Os detalhes importam
Veja como o WebHost monta a configuração:
public static IWebHostBuilder CreateDefaultBuilder(string[] args)
{
config.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true, reloadOnChange: true);
if (env.IsDevelopment())
{
var appAssembly = Assembly.Load(new AssemblyName(env.ApplicationName));
if (appAssembly != null)
{
config.AddUserSecrets(appAssembly, optional: true);
}
}
config.AddEnvironmentVariables();
if (args != null)
{
config.AddCommandLine(args);
}
}
Cuidado com a variável env.EnvironmentName
, configurada em ASPNETCORE_ENVIRONMENT, que pode estar no launchSettings.json ou no sistema operacional. Em Development, os User Secrets são ativados para guardar senhas de banco.
Camadas do appsettings
O appsettings tem várias camadas:
appsettings.json
.appsettings.Development.json
.- User Secrets.
- Variáveis de ambiente.
- Argumentos da linha de comando.
Níveis (Hierarquia)
Cada camada pode sobrescrever a anterior, permitindo configurações específicas para cada ambiente.
User Secrets
Use User Secrets para guardar senhas na sua máquina sem colocá-las no git.
Como usar o User Secrets?
No projeto, escolha Manage User Secrets. Ele salva tudo na máquina local.
Compartilhando User Secrets
Para usar em outros projetos:
<UserSecretsId>id</UserSecretsId>
Variáveis de ambiente
ASPNETCORE_ENVIRONMENT
pode ser Development, Staging, Production ou outro valor. No Linux, a capitalização importa.
Quer modificar o appsettings? Fácil. Por exemplo, no appsettings.json
:
{
"EmailParaEnviarErro": "[email protected]"
}
Uma variável de ambiente pode mudá-lo.
Docker
No Dockerfile:
ENV ASPNETCORE_ENVIRONMENT=Production
No Compose:
environment:
ASPNETCORE_ENVIRONMENT: Development
ApplicationSettings:EnableExternalProviders: "false"
Kubernetes
No Kubernetes, configure as variáveis de ambiente do deployment:
apiVersion: apps/v1
kind: Deployment
metadata:
name: minha-aplicacao
spec:
replicas: 1
template:
spec:
containers:
- name: minha-aplicacao-container
image: meu-repositorio/minha-aplicacao:latest
env:
- name: ApplicationSettings__OneMoreLevel__3rdLevel
value: "Mudado pelo Kubernetes"
Azure AppService
Para alterar as configurações no Azure, vá em App Services > Seu App Service > Configuration.
Alterando subníveis
No appsettings.json
:
{
"ApplicationSettings": {
"OneMoreLevel": {
"3rdLevel": "data"
}
}
}
No Docker Compose:
environment:
ApplicationSettings:OneMoreLevel:3rdLevel: "Changed!"
No Azure, Windows permite dois pontos (:
), mas no Linux use underline duplo (__
).
Bônus: Consultar variáveis no Azure AppService
Vá em Advanced Tools > Go e confira em Environment no Kudu.