Параметры приложения службы приложений Azure, не переопределяющие значения appsettings.json

#azure #azure-web-app-service #azure-configuration

#azure #azure-web-app-service #azure-конфигурация

Вопрос:

У меня есть React SPA с серверной частью .Net Core WebAPI, которая развертывается в службе приложений Azure. При локальной разработке я использую файл appsettings.json для настройки серверной части WebAPI. Я устанавливаю пару ключ / значение для внешнего API с именем «XyzApi».

 {
  "XyzApi": "https://somedomain/api"
}
  

В контроллере WebAPI я получаю доступ к этому параметру конфигурации с помощью поставщика конфигурации.

 var xyzApiUrl = Configuration["XyzApi"]
  

Это работает нормально.

Когда я развертываю приложение в службе приложений, мне нужно изменить значение «XyzApi», чтобы переопределить значение из appsettings.json новым значением. Я добавил пару ключ / значение с именем «XyzApi» в разделе настроек приложения службы приложений в Azure.

В документации службы приложений для настроек приложения говорится, что значение будет доступно для конфигурации как переменная среды с именем «APPSETTING_XyzApi». В нем также говорится, что предполагается переопределить значение из файла appsettings.json для ключа «XyzApi».

Когда приложение запускается. Проблема в том, что значение для «XyzApi» по-прежнему равно значению из файла appsettings.json. Он НЕ переопределяется. И, как и ожидалось, теперь есть новая пара ключ / значение для «APPSETTING_XyzApi».

Почему служба приложений Azure не переопределяет пару ключ / значение из файла appsettings.json с новым значением, настроенным в настройках приложения Azure AppService.

Вот код, который настраивает поставщика конфигурации.

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

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseStartup<Startup>();
            })
            .ConfigureAppConfiguration((hostingContext, config) =>
            {
                var env = hostingContext.HostingEnvironment;

                config.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
                    .AddJsonFile($"appsettings.{env.EnvironmentName}.json",
                        optional: true, reloadOnChange: true)
                    .AddEnvironmentVariables(); 
            });
}
  

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

1. Привет, @Mike Murphy, не могли бы вы принять мой ответ в качестве ответа для других?

Ответ №1:

Все шаги, которые вы выполнили, верны, за исключением имени appsettings в portal. Вы добавляете "APPSETTING_XyzApi" конфигурацию, которая отличается от "XyzApi" in appsettings.json . Это переопределит только в том случае, если имя подходит.

Вот пример:

1. Я устанавливаю "myKey": "value1" в appsettings.json в local и показываю значение на своей индексной странице.

введите описание изображения здесь

! [введите описание изображения здесь

2. После публикации я устанавливаю value значение 123123 :
! [введите описание изображения здесь

3. Переопределение значения:

введите описание изображения здесь

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

1. Извините, я не понял, я правильно установил ключ в службе приложений на «XyxApi». Azure добавляет префикс «APPSETTING_» при отображении ключа / значения в качестве переменной среды. Он просто делает это. Также предполагается, что оно переопределяет значение из appsettingd.json, но это не так.

2. На самом деле у вас возникло некоторое недопонимание этого переопределения. Значение appsettings.json не будет переопределяться, поскольку этот файл работает локально и когда ничего не настроено в настройках приложения. Значение в вашем веб-приложении для хостинга будет переопределено, как и на тестовом изображении, которое я публикую. @MikeMurphy