使用标签提供按环境配置值。

许多应用程序需要针对不同的环境使用不同的配置。 假设应用程序有一个配置值,该配置值定义了用于其后端数据库的连接字符串。 应用程序开发者使用的数据库与生产环境中使用的数据库不同。 当应用程序从开发环境转移到生产环境时,应用程序使用的数据库连接字符串必须进行更改。

在 Azure 应用配置中,可以使用“标签”为同一个键定义不同的值。 例如,可以定义单个键,对开发和生产环境使用不同的值。 可以指定在连接到应用配置时要加载哪个标签。

为了演示此功能,需修改在快速入门:使用 Azure 应用配置创建 ASP.NET Core 应用中创建的 Web 应用,对开发环境与生产环境使用不同的配置设置。 在继续操作之前,请先完成该快速入门。

在添加配置值时指定标签

在 Azure 门户中,转到“配置资源管理器”并找到你在该快速入门中创建的 TestApp:Settings:FontColor 键。 选择其上下文菜单,然后选择“添加值”。

“添加值”菜单项

在“添加值”屏幕上,输入“红色”作为值,输入“开发”作为标签。 将“内容类型”保留为空。 选择“应用”。

加载具有指定标签的配置值

默认情况下,Azure 应用配置仅加载没有标签的配置值。 如果你为配置值定义了标签,则需要指定在连接到应用配置时要使用的标签。

在上一部分中,你为开发环境创建了一个不同的配置值。 使用 HostingEnvironment.EnvironmentName 变量来动态确定应用当前在哪个环境中运行。 若要了解详细信息,请参阅在 ASP.NET Core 中使用多个环境

添加对 Microsoft.Extensions.Configuration.AzureAppConfiguration 命名空间的引用,以便访问 KeyFilterLabelFilter 类。

using Microsoft.Extensions.Configuration.AzureAppConfiguration;

通过将环境名称传递给 Select 方法,加载其标签与当前环境对应的配置值:

var builder = WebApplication.CreateBuilder(args);

builder.Configuration.AddAzureAppConfiguration(options =>
    {
            options.Connect(builder.Configuration.GetConnectionString("AppConfig"))
                // Load configuration values with no label
                .Select(KeyFilter.Any, LabelFilter.Null)
                // Override with any configuration values specific to current hosting env
                .Select(KeyFilter.Any, builder.Environment.EnvironmentName);
    });

重要

前面的代码片段使用机密管理器工具加载应用配置连接字符串。 有关使用机密管理器存储连接字符串的信息,请参阅将 Azure 应用配置与 ASP.NET Core 结合使用的快速入门

Select 方法将调用两次。 第一次,它加载没有标签的配置值。 然后,它加载其标签与当前环境对应的配置值。 这些特定于环境的值会替代没有标签的任何对应值。 不需要为每个键都定义特定于环境的值。 如果某个键没有值具有与当前环境对应的标签,它将使用没有标签的值。

在不同的环境中测试

打开 Properties 目录下的 launchSettings.json 文件。 在 profiles 下找到 config 条目。 在 environmentVariables 部分中,将 ASPNETCORE_ENVIRONMENT 变量设置为 Production

设置新值后,生成并运行你的应用程序。

dotnet build
dotnet run

在 Web 浏览器中转到 http://localhost:5000。 你会注意到,字体颜色为黑色。

以生产配置运行的 Web 应用程序

更新 launchSettings.json,将 ASPNETCORE_ENVIRONMENT 变量设置为 Development。 再次运行 dotnet run

你会注意到,字体颜色现在为红色。 这是因为应用程序现在使用具有 Development 标签的 TestApp:Settings:FontColor 的值。 所有其他配置值保持与其生产值相同。

以开发配置运行的 Web 应用程序

后续步骤