Aplikacja .NET Core 3.1 do stosowania zmiennych środowiskowych, działających w Kubernetes, i powrócić do appsettings.json, jeśli nie jest ustawiona zmienna środowiskowa

0

Pytanie

Próbuję zmusić swoją aplikację .NET Core 3.1 używać zmiennych środowiskowych podczas pracy w Kubernetes i wrócić do appsettings.json gdy zmienna nie jest ustawiona.

Używam go w swojej ConfigureServices metoda w pliku startowym

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

Mój appsettings.json w pliku jest to

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

Ja ustawiam zmienną środowiska, przy użyciu następującego polecenia w wierszu polecenia.

setx DB_NAME ="Kube_test_db"

Kiedy uruchamiam aplikację w Visual Studio, otrzymuję nazwę bazy danych w postaci Kube_test_db. Kiedy usuwam zmienną środowiska użytkownika w ustawieniach systemu Windows 10 i ponownie uruchomić aplikację w Visual Studio, ten wiersz zwraca wartość null.

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

Czego mi brakuje, aby wartość wróciło do tego, co jest określone w appsettings.json akta?

1

Najlepsza odpowiedź

0

Skorzystaj z .AddJsonFile.

I zrób to, zanim zadzwonisz .AddEnvironmentVariables(). Oto tak:

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

Nie otrzymuję środowiska hostingowego w metodzie ustawień, gdzie mi to potrzebne. Ponadto, trzeba będzie zmienić var dbname = configuration.GetSection("DB_NAME").Value; Dla var dbname = configuration.GetSection("Appsettings:Data:DB_NAME").Value; aby uzyskać wartość z pliku appsettings.json. To nie pasuje do zmiennej środowiskowej, która jest tylko DB_NAME. Jeśli położę zmienną środowiska w Appsettings:Data:DB_NAME i uruchom kod jak dbname = configuration.GetSection("Appsettings:Data:DB_NAME").Value; wtedy ja nadal otrzymuję wartość z appsettings.json, a nie z otoczenia.
user20358

Skorzystaj z __ (2 podkreślenia) jako separatora do ustawienia zmiennych środowiskowych: docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration/...
omajid

W innych językach

Ta strona jest w innych językach

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