Перезагружаемая настраиваемая конфигурация для приложения ASP.NET Core, размещенного в службе приложений Azure

Мне нужно предоставить несколько простых параметров конфигурации для моего веб-сайта, которые должно быть легко изменить, не требуя перекомпиляции или перезапуска приложения. Я также хотел бы, чтобы параметры были кэшированы в приложении, но они должны обновляться при изменении конфигурации (или, по крайней мере, каждые несколько минут). Мой веб-сайт представляет собой приложение ASP.NET Core MVC, которое работает в службе приложений Azure и развертывается путем отправки в репозиторий git, а затем перестраивается с помощью Kudu.

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

Я заметил, что у поставщика конфигурации JSON есть опция reloadOnChange, так что это кажется хорошим кандидатом. Однако я не уверен, где мне следует разместить файл JSON в среде службы приложений Azure, чтобы приложение могло легко его прочитать, было доступно для всех экземпляров и сохранялось между развертываниями. Я знаю, что папка «d: \ home» является общей и постоянной. Wwwroot находится внутри него, но я боюсь, что файл может быть удален в какой-то момент при повторном развертывании приложения. Поэтому я хотел бы поместить его в одну из родительских папок, но как мне получить доступ к домашней папке из кода C #? Я предполагаю, что мне не следует просто жестко закодировать путь "d: \ home".

Я также очень хочу услышать о любых альтернативных способах достижения цели.


person Michał Fronczyk    schedule 04.07.2018    source источник


Ответы (1)


На самом деле, вам не нужно беспокоиться о том, что он удалит appsetting.json файл при повторном развертывании. Если вы измените настройки, он переопределит файл json.

var configuration = new ConfigurationBuilder()
           .SetBasePath(System.IO.Directory.GetCurrentDirectory())
           .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
           .AddEnvironmentVariables()
           .Build();

Примечание. При публикации приложения помните, не нажимайте "Remove additional files at destination".

Кроме того, если вы хотите установить appsetting.json в домашней папке, вы можете использовать Environment.GetEnvironmentVariable("Home");, который равен «D: \ home».

И если вы настроили это так, вам нужно установить ASPNETCORE_ENVIRONMENT на различение вашей среды: лазурная или локальная.

person Joey Cai    schedule 04.07.2018
comment
Извините, я забыл добавить, что я развертываю, нажимая на репозиторий git, а затем kudu перестраивает проект на сервере при каждом развертывании. Знаете ли вы, что такой способ развертывания гарантирует, что файл не будет удален? - person Michał Fronczyk; 04.07.2018
comment
Независимо от того, будет ли он удален или отменен, конечный результат будет таким же, все настройки самые последние. И я думаю, вам не нужно устанавливать файл json в домашнюю папку, когда он изменится, он перезагрузится в веб-приложение. - person Joey Cai; 05.07.2018
comment
Я не люблю хранить некоторые константы в файле JSON, и я не могу его потерять, потому что тогда будут использоваться значения по умолчанию. Думаю, ответ - сохранить файл в домашней папке и ссылаться на него с помощью Environment.GetEnvironmentVariable (Home). - person Michał Fronczyk; 06.07.2018