Рекомендуемая практика, как включить более сложные данные конфигурации JSON в файл Azure Function local.settings.json?

Я использую функции Azure 2

Я просматриваю документацию по файлу локальных настроек функций Azure здесь:

https://docs.microsoft.com/en-us/azure/azure-functions/functions-run-local#local-settings-file

В документации приведен пример файла local.settings.json:

{
  "IsEncrypted": false,
  "Values": {
    "FUNCTIONS_WORKER_RUNTIME": "<language worker>",
    "AzureWebJobsStorage": "<connection-string>",
    "AzureWebJobsDashboard": "<connection-string>",
    "MyBindingConnection": "<binding-connection-string>"
  },
  "Host": {
    "LocalHttpPort": 7071,
    "CORS": "*"
  },
  "ConnectionStrings": {
    "SQLConnectionString": "<sqlclient-connection-string>"
  }
}

Я понимаю, что элементы в «Значения» будут доступны через переменные среды, такие как Environment.GetEnvironmentVariable

Мне нужно включить более сложные настройки (вложенные данные JSON с массивами в них) в настройки моей функции.

Что было бы лучше всего или рекомендовано для этого?


person Allan Xu    schedule 23.11.2018    source источник


Ответы (1)


Ожидается, что коллекция Values будет Dictionary<string, string>, поэтому мы не можем помещать вложенные данные JSON с массивами внутрь. Попробуйте создать новый раздел для ваших данных Json и прочитать файл Json как обычно. Мы не можем использовать Environment.GetEnvironmentVariable, потому что пользовательские настройки не импортируются в переменные среды.

{
  "Values": {},
  "CustomSettings":{}
}

Добавьте ExecutionContext context в подпись метода функции, чтобы найти файл настроек.

var reader = new StreamReader(context.FunctionAppDirectory+"/local.settings.json");
var myJson = reader.ReadToEnd();

Для функции v2 мы можем использовать ConfigurationBuilder.

var config = new ConfigurationBuilder()
    .SetBasePath(context.FunctionAppDirectory)
    .AddJsonFile("local.settings.json", optional: false, reloadOnChange: true)
    .AddEnvironmentVariables()
    .Build();

local.settings.json предназначен для предоставления локальному разработчику эквивалента параметров приложения на портале Azure. По умолчанию он не публикуется в Azure. Чтобы опубликовать его, щелкните правой кнопкой мыши проект> Edit <functionappname>.csproj и удалите <CopyToPublishDirectory>Never</CopyToPublishDirectory>.

person Jerry Liu    schedule 24.11.2018