Не работает config.GetSection в Azure функциях? И какая альтернатива рекомендуется? - PullRequest
0 голосов
/ 03 августа 2020

Azure Функция со сложным типом конфигурации (Список объектов) работает локально (с этим сложным типом в local.settings. json), но не может прочитать / создать список объектов в Azure (с этим сложный тип в Azure Параметры конфигурации функции). Я ищу рекомендуемый / оптимальный способ поддержки этого на обеих платформах / методах доступа.

Это отлично работает в моих local.settings. json, где я использую построитель конфигурации и извлекаю данные, например

var myList = config.GetSection("ConfigurationList").Get<List<MyType>>();

, однако это не работает в Azure функциях ?? Теперь я думаю, что это потому, что в local.settings. json это файл json и выглядит как

"ConfigurationList" : [ { "Name": "A", "Value": 2 }, { "Name": "B", "Value": 3 }]

, а в Azure Functions это параметр «ConfigurationList» со значением

[ { "Name": "A", "Value": 2 }, { "Name": "B", "Value": 3 }]

(так что на самом деле нет «раздела» в Azure функциях?)

Кажется, что «простое» решение - просто изменить. json быть строкой в ​​кавычках и десериализовать строку (и тогда она будет работать одинаково в обоих местах); но это не похоже на «лучшее» (или «рекомендованное» решение), т.е. что-то вроде

"ConfigurationList" : "[ { \"Name\": \"A\", \"Value\": 2 }, { \"Name\": \"B\", \"Value\": 3 }]"
var myList = (List<MyType>)JsonConvert.DeserializeObject(config["ConfigurationList"], typeof(List<MyType>));

Что не самое худшее; но делает json немного «не таким красивым» и не «перетекает» через две платформы ... если это то, что я должен делать, хорошо; но надеясь на более стандартный подход / рекомендацию

Ответы [ 2 ]

1 голос
/ 03 августа 2020

Как я упоминал в комментарии, на локальном уровне вы можете обрабатывать local.settings. json как файл json, но когда на azure, значение в настройках конфигурации является переменной среды. Раздела нет, это просто строка.

Обратите внимание, что разрешены только строковые значения, и что все, что вложено, сломается. Узнайте, как использовать настройки вложения в веб-приложении azure (функция azure основана на изолированной программной среде службы приложения azure, поэтому это то же самое.):

https://docs.microsoft.com/en-us/archive/blogs/waws/asp-net-core-settings-for-azure-app-service

Например, если это структура json:

{
  "Parent": {
    "ChildOne": "C1 from secrets.json",
    "ChildTwo": "C2 from secrets.json"
  }
}

Тогда в веб-приложении вы должны сохранить это так:

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

0 голосов
/ 03 августа 2020

Не уверен, что вы смотрите что-то вроде этого, это похоже на список, но если это простой JObject, например

"ConfigurationList": {"Name": "A", "Value": 2}

Затем вы можете объявить ConfigurationList: Name, ConfigurationList: Value в настройках конфигурации приложения-функции

...