Приложение .NET Core 3.1 для использования переменных среды, запущенных в Kubernetes, и возврата к appsettings.json, если переменная среды не задана

0

Вопрос

Я пытаюсь заставить свое приложение .NET Core 3.1 использовать переменные среды при работе в Kubernetes и вернуться к appsettings.json когда переменная окружения там не задана.

Я использую это в своей ConfigureServices метод в файле автозагрузки

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

Мой appsettings.json в файле есть это

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

Я устанавливаю переменную среды, используя следующую команду в командной строке.

setx DB_NAME ="Kube_test_db"

Когда я запускаю приложение в Visual Studio, я получаю имя бд в виде Kube_test_db. Когда я удаляю переменную пользовательского окружения в системных настройках Windows 10 и снова запускаю приложение в Visual Studio, эта строка возвращает значение null.

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

Чего мне не хватает, чтобы значение возвращалось к тому, что определено в appsettings.json досье?

1

Лучший ответ

0

Воспользуйся .AddJsonFile.

И сделай это до того, как позвонишь .AddEnvironmentVariables(). Вот так:

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

Я не получаю среду хостинга в методе настройки, где мне это нужно. Кроме того, мне нужно будет изменить var dbname = configuration.GetSection("DB_NAME").Value; Для var dbname = configuration.GetSection("Appsettings:Data:DB_NAME").Value; чтобы получить значение из файла appsettings.json. Это не соответствует переменной среды, которая является только DB_NAME. Если я помещу переменную среды в Appsettings:Data:DB_NAME и запустите код как dbname = configuration.GetSection("Appsettings:Data:DB_NAME").Value; тогда я все равно получаю значение из appsettings.json, а не из среды.
user20358

Воспользуйся __ (2 подчеркивания) в качестве разделителя для установки переменных среды: docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration/...
omajid

На других языках

Эта страница на других языках

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