在 Azure Function 应用程序设置中使用数组

问题描述 投票:0回答:2

我正在使用

appsettings.json
配置我的 Azure Function(netcoreapp3.1,在 Windows 计算机上运行)。

appsettings.json
文件中有一个包含设置的数组:

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

如果我在本地运行Azure Function,它就可以正常工作。但它似乎无法在 Azure 上工作,尽管

appsettings.json
文件已部署并且可以通过 Azure Function 找到。

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 数组设置:ArraySettingProperty1:0

    2.2 ArraySettings__ArraySettingsProperty1__0

    2.3 值__ArraySettings__ArraySettingsProperty1__0

为什么阵列设置在本地有效,但在 Azure 上无效?我怎样才能让它们在 Azure 上工作?谢谢!

c# azure azure-functions
2个回答
6
投票

请尝试在应用服务的配置设置中进行如下设置:

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 上都可以工作。


0
投票

这有效:

public class MyOptions
{
      public List<string> MyArray { get; set; }
}

// local.settings.json:
{
  "IsEncrypted": false,
  "Values": {
    "MyOptions__MyArray__0": "foo",
    "MyOptions__MyArray__1": "bar"
  }
}

// In startup.cs:
builder.Services.Configure<MyOptions>(configuration.GetSection("MyOptions"));
© www.soinside.com 2019 - 2024. All rights reserved.