Почему переменная окружения игнорируется, если настройка существует в appsetings.json? - PullRequest
0 голосов
/ 24 января 2019

Вот моя программа:

public class Program
{
    public static void Main(string[] args)
    {
        CreateWebHostBuilder(args).Build()
        .Run();
    }

    public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseStartup<Startup>();
}

Ничего особенного.

В appsettings.json файле У меня есть настройка:

{
    "Integrations" : {
        "Pipedrive" : {
            "ApiToken" : "some value"
            ...
        }
    }
}

Я также установил переменнуюASPNETCORE_INTEGRATIONS__PIPEDRIVE__APITOKEN.

Если я удаляю ключ из файла appsettings.json, Конфигурация возвращает мне то же значение, что и переменная среды.

Однако, если ключ существует в файле настроек, я получаю значение изфайл.
Более того, я вижу, что EnvironmentVariablesConfigurationProvider идет после JsonConfigurationProvider.

И самое странное здесь то, что когда я пытаюсь ввести Immediate Window:

Configuration.GetValue<string>("ASPNETCORE_Integrations:Pipedrive:ApiToken");

Я получаю значение, присвоенное переменной среды.

Может кто-нибудь объяснить мне, почему в одном случае префикс ASPNETCORE_ игнорируется, а в другом - нет.

Я не настраиваюКонфигурация хоста или приложения явно.

1 Ответ

0 голосов
/ 24 января 2019

Для переменных среды разделы должны быть обозначены каким-либо разделителем. Обычно это :, хотя, очевидно, двойное подчеркивание (__) также работает. Однако ASPNETCORE_ имеет только одно подчеркивание, поэтому он интерпретируется как один токен с INTEGRATIONS. Тем не менее, даже если у вас там есть двойное подчеркивание, оно все равно не заменит ваш JSON, потому что в JSON нет секции ASPNETCORE.

Длинный и короткий, сбросьте бит ASPNETCORE_. Имя переменной среды должно совпадать с вашими разделами JSON точно (с разделителем между именами каждого раздела), иначе ничего не будет переопределено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...