.NET Núcleo 3.1 app para utilizar variáveis de ambiente, executando em Kubernetes e uma alternativa para appsettings.json quando a variável de ambiente não definido

0

Pergunta

Estou tentando colocar o meu .NET Núcleo 3.1 app para utilizar variáveis de ambiente, quando em execução no Kubernetes e uma alternativa para appsettings.json quando a variável de ambiente não definido não.

Eu estou usando isso no meu ConfigureServices método no arquivo de inicialização

var configuration = new ConfigurationBuilder()
                                    .AddEnvironmentVariables()
                                    .Build();
var dbname = configuration.GetSection("DB_NAME").Value;

Meu appsettings.json este arquivo tem

{
    "AppSettings": {
        "Data": {
            "DB_NAME":"test_db"
        }
    }
}

Estou definindo a variável de ambiente usando o seguinte comando no prompt de comando.

setx DB_NAME ="Kube_test_db"

Quando eu executar o aplicativo no Visual Studio, obtenho o nome do banco de dados como Kube_test_db. Quando eu excluir a variável de ambiente do Usuário no Windows 10 configurações do sistema e execute o aplicativo novamente no Visual Studio, esta linha retorna null.

var dbname = configuration.GetSection("DB_NAME").Value;

O que é que estou em falta para obter o valor de cair de volta para o que é definido na appsettings.json arquivo?

1

Melhor resposta

0

Utilização .AddJsonFile.

E fazê-lo antes de chamar .AddEnvironmentVariables(). Assim:

        new ConfigurationBuilder()
            .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
            .AddEnvironmentVariables()
            .Build();
2021-11-26 17:49:28

Se eu não receber hostingEnvironment em configurar método onde eu preciso. Além disso, será preciso alterar o var dbname = configuration.GetSection("DB_NAME").Value; para var dbname = configuration.GetSection("Appsettings:Data:DB_NAME").Value; para obter o valor da appsettings.json. Isto não coincidir com a variável de ambiente que é só DB_NAME. Se eu colocar a variável de ambiente como Appsettings:Data:DB_NAME e executar o código como dbname = configuration.GetSection("Appsettings:Data:DB_NAME").Value; em seguida, eu ainda obter o valor da appsettings.json e não do ambiente.
user20358

Utilização __ (2 sublinhados) como separador para definir as variáveis de ambiente: docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration/...
omajid

Em outros idiomas

Esta página está em outros idiomas

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................