Не удается настроить иерархические параметры с помощью dotnet в IIS

#asp.net #.net #asp.net-core #iis #appsettings

Вопрос:

Для нашего приложения dotnet у нас есть файл appsettings.json, в котором используются иерархические настройки, такие как:

«mysection»: { «мое свойство»: «моя секретная ценность» }

Этот файл appsettings.json используется для целей разработки.

В рабочем режиме мы используем Azure Keyvault (поскольку наше приложение работает под управлением Azure). В keyvault Секрет определяется с помощью

mysection—моя собственность

Но теперь нам нужно развернуть тот же веб-сервис в IIS. Мы хотели бы определить секретное значение в настройках IIS, но mysection—myproperty или mysection:myproperty не работает.

У вас есть идея, как установить эту иерархию в IIS?

Комментарии:

1.В хранилище ключей Azure иерархические ключи используют — в качестве разделителя. Поставщик конфигурации хранилища ключей Azure автоматически заменяет — на:, когда секреты загружаются в конфигурацию приложения. docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration/…

2. Используйте IConfigurationRoot.GetDebugView() , чтобы увидеть, как подключена конфигурация: andrewlock.net/debugging-configuration-values-in-aspnetcore

3. @abdusco Я знаю, что keyvault использует — в качестве разделителя. Но я ищу решение с конфигурацией внутри IIS

4. О, для этого вы бы использовали переменные среды, и они разделены двойным подчеркиванием __

5. @abdusco Поместите свой комментарий в качестве ответа, я проверю, насколько правильный ответ. Большое спасибо!

Ответ №1:

При использовании переменных среды подразделы необходимо разделять двойным подчеркиванием __ .

Из документов:

: Разделитель не работает с иерархическими ключами переменных среды на всех платформах. __ , двойное подчеркивание, является:

  • Поддерживается всеми платформами. Например, : разделитель не поддерживается Bash, но __ есть.
  • Автоматически заменяется на :

Это означает, что вам нужно перейти mysection--myproperty на

 mysection__myproperty
 

чтобы он был правильно проанализирован.

Кроме того, вы можете использовать IConfigurationRoot.GetDebugView() , чтобы узнать, откуда берется значение конфигурации.