Получение строк подключения веб-приложения с помощью ConfigurationBuilder
Мы храним некоторые из наших чувствительных ключей и строк подключения в разделе Строки подключения в настройках приложения Web App:
Мы получаем параметры конфигурации, используя ConfigurationBuilder
:
Configuration = new ConfigurationBuilder()
.SetBasePath(environment.ContentRootPath)
.AddEnvironmentVariables()
.Build();
Я бы ожидал AddEnvironmentVariables()
подобрать эти строки соединения, но это не так. Обратите внимание, что это работает, если вы установите эти значения как "Настройки приложения" в веб-приложении.
При более внимательном рассмотрении (с использованием консоли Kudu) я обнаружил, что переменные среды, устанавливаемые для этих строк соединений, имеют префикс CUSTOMCONNSTR_ к имени ключа:
CUSTOMCONNSTR_MongoDb:ConnectionString=...
CUSTOMCONNSTR_Logging:ConnectionString=...
CUSTOMCONNSTR_ApplicationInsights:ChronosInstrumentationKey=...
Как мне теперь читать в этих строках соединения, используя ConfigurationBuilder
?
РЕДАКТИРОВАТЬ:
Я нашел это удобным AddEnvironmentVariables
перегрузка существует с prefix
параметр, описываемый как:
// prefix:
// The prefix that environment variable names must start with. The prefix will be
// removed from the environment variable names.
Но добавляя .AddEnvironmentVariables("CUSTOMCONNSTR_")
к компоновщику конфигурации тоже не работает!
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();
}
Это должно просто работать, и это работает для меня в моем примере приложения: https://github.com/davidebbo-test/AspNetCoreDemo. В частности:
MyDatabase
Строка подключения определяется здесь.- Это используется здесь.
- Если вы определите
MyDatabase
В строке conn в портале Azure вы увидите новое значение во время выполнения (перейдите на страницу "О программе").
Поэтому начните с проверки работоспособности шахты и постарайтесь увидеть, что вы делаете по-другому. Вы никогда не должны делать какие-либо предположения о CUSTOMCONNSTR_
префикс!