你可以使用 IConfiguration.GetSection() 来读取环境变量吗?

Can you use IConfiguration.GetSection() to read environment variables?

我在 .NET 6 中使用 Microsoft.Extensions.Configuration。我正在尝试使用 IConfiguration.GetSection("MySection") 读取前缀为 MySection 的所有环境变量,但它不起作用。

对于其他上下文:我想这样做,以便我可以从 Azure Functions 应用程序的“应用程序设置”选项卡中填充各种应用程序设置类。

我做错了什么还是不支持这个用例?

这是我的程序:

using Microsoft.Extensions.Configuration;
using System.Text.Json;

Environment.SetEnvironmentVariable("MySection__MyProperty", "fromEnvironmentVariable");
var configuration = new ConfigurationBuilder().AddEnvironmentVariables().Build();

Console.WriteLine(
    "Environment variable = " + 
    Environment.GetEnvironmentVariable("MySection__MyProperty")
);

Console.WriteLine(
    "configuration[\"MySection:MyProperty\"] = " + 
    configuration["MySection:MyProperty"]
);

Console.WriteLine(
    "configuration.GetSection(\"MySection\") = " +
    JsonSerializer.Serialize(configuration.GetSection("MySection"))
);

程序输出:

Environment variable = fromEnvironmentVariable
configuration["MySection:MyProperty"] = fromEnvironmentVariable
configuration.GetSection("MySection") = {"Key":"MySection","Path":"MySection","Value":null}

我希望最后一行的 Value 包含 fromEnvironmentVariable 但它没有。

更改此行;

JsonSerializer.Serialize(configuration.GetSection("MySection"))

对此;

JsonSerializer.Serialize(configuration.GetSection("MySection").GetChildren())