Использование массива в настройках приложения функций Azure

#c# #azure #azure-functions

Вопрос:

Я использую appsettings.json для настройки своей функции Azure (netcoreapp3.1, запущенной на компьютере с Windows).

В appsettings.json файле есть массив с настройками:

 {
    "ArraySettings": [
        {
            "ArraySettingProperty1": "ArraySetting1Value1",
            "ArraySettingProperty2": "ArraySetting1Property2"
        },
        {
            "ArraySettingProperty1": "ArraySetting2Value1",
            "ArraySettingProperty2": "ArraySetting2Property2"
        }
    ],
    "SingleSetting": "SingleValue"
}
 

Это прекрасно работает, если я запускаю функцию Azure локально. Но, похоже, это не работает в Azure, хотя appsettings.json файл был развернут и может быть найден функцией Azure.

В Startup.cs :

 private IConfiguration InitializeConfiguration(IFunctionsHostBuilder functionsHostBuilder)
        {
            ExecutionContextOptions executionContextOptions = functionsHostBuilder
               .Services
               .BuildServiceProvider()
               .GetService<IOptions<ExecutionContextOptions>>()
               .Value;

            return new ConfigurationBuilder()
                .SetBasePath(executionContextOptions.AppDirectory)
                .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
                .AddEnvironmentVariables()
                .Build();
        }
 

Это то, что я уже пробовал (безуспешно):

  1. Копирование настроек в Values раздел local.settings.json файла
  2. Добавление параметров в Параметры приложения в Azure (с комментариями appsettings.json конфигурации и без них) в следующих ключевых форматах:

    2.1 Наборы массивов:Свойства набора массивов1:0

    2.2 ArraySettings__ArraySettingsProperty1__0

    2.3 Значения__ArraySettings__ArraySettingsProperty1__0

Почему параметры массива работают локально, но не в Azure? Как я могу заставить их работать в Azure? Спасибо!

Ответ №1:

Пожалуйста, попробуйте настроить их следующим образом в настройках конфигурации в вашей службе приложений:

 Key: ArraySettings__0__ArraySettingProperty1

Value: ArraySetting1Value1

Key: ArraySettings__0__ArraySettingProperty2

Value: ArraySetting1Value2

Key: ArraySettings__1__ArraySettingProperty1

Value: ArraySetting1Value1

Key: ArraySettings__1__ArraySettingProperty2

Value: ArraySetting1Value2

Key: SingleSetting

Value: SingleValue
 

Если ваша служба приложений развернута в Windows, вы можете использовать : ее в качестве разделителя вместо __ . Однако __ работает как в Windows, так и в Linux.