Мы храним некоторые из наших чувствительных ключей и строк подключения в разделе Строки подключения в настройках приложения Web App:

Connection strings Azure Web App

Мы получаем параметры конфигурации, используя ConfigurationBuilder:

Configuration = new ConfigurationBuilder()
    .SetBasePath(environment.ContentRootPath)
    .AddEnvironmentVariables()
    .Build();

Я бы ожидал, что AddEnvironmentVariables() подхватит эти строки подключения, но это не так. Обратите внимание, что это работает, если вы установите эти значения как «Настройки приложения» в веб-приложении.

При более внимательном рассмотрении (с использованием консоли Kudu) я обнаружил, что переменные среды, устанавливаемые для этих строк соединений, имеют префикс CUSTOMCONNSTR _ перед именем ключа:

CUSTOMCONNSTR_MongoDb:ConnectionString=...
CUSTOMCONNSTR_Logging:ConnectionString=...
CUSTOMCONNSTR_ApplicationInsights:ChronosInstrumentationKey=...

Как мне теперь читать в этих строках соединения, используя ConfigurationBuilder?

< Сильный > EDIT :

Я обнаружил, что существует удобная перегрузка AddEnvironmentVariables с параметром prefix, описанным как:

//   prefix:
//     The prefix that environment variable names must start with. The prefix will be
//     removed from the environment variable names.

Но добавление .AddEnvironmentVariables("CUSTOMCONNSTR_") в конструктор конфигурации тоже не работает!

5
Dave New 24 Апр 2017 в 18:33

2 ответа

Лучший ответ

Но добавление .AddEnvironmentVariables ("CUSTOMCONNSTR_") в конструктор конфигурации также не работает!

AddEnvironmentVariables с префиксом просто добавляет ограничение для переменных среды, которое должно с указанным префиксом. Это не изменит переменные среды.

Чтобы получить значение из конфигурации строки подключения, вы можете использовать код следующим образом.

Configuration.GetConnectionString("MongoDb:ConnectionString");

Для настройки иерархической структуры добавьте ее в настройки приложения вместо строк подключения на портале Azure.

Как мне теперь читать в этих строках соединения, используя ConfigurationBuilder?

В качестве обходного пути вы можете повторно добавить EnvironmentVariable и перестроить ConfigurationBuilder после получения строки подключения. Код ниже для вашей справки.

public Startup(IHostingEnvironment env)
{
    var builder = new ConfigurationBuilder()
        .SetBasePath(env.ContentRootPath)
        .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
        .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
        .AddEnvironmentVariables();

    Configuration = builder.Build();
    //Add EnvironmentVariable and rebuild ConfigurationBuilder
    Environment.SetEnvironmentVariable("MongoDb:ConnectionString", Configuration.GetConnectionString("MongoDb:ConnectionString"));
    builder.AddEnvironmentVariables();
    Configuration = builder.Build();
}
2
Amor 25 Апр 2017 в 09:10

Это должно просто работать, и это работает для меня в моем примере приложения: https://github.com/davidebbo -test / AspNetCoreDemo. В частности :

43592215