在Azure应用程序配置中,您可以存储具有多个值的密钥,并通过标签进行区分。
构建配置时,可以使用labelFilter="SomeLabel">筛选要从存储读取的密钥
在我的情况下,我在应用商店中有50个密钥没有任何标签(无标签(,还有4个密钥有两个值,一个值用于标签SomeLabel,另一个值为。
我想取回所有54把钥匙。对于具有多个值的4个键,我想要标签为SomeLabel的值。
如果我使用labelFilter="SomeLabel">,我只得到带标签的4个键,则会过滤掉没有任何标签的50个键。
有可能实现我想要的功能吗?
<configBuilders>
<builders>
<add name="SomeAzureAppConfigStore" labelFilter="SomeLabel" mode="Greedy" prefix="My.App:" stripPrefix="true" connectionString="${MyConnectionString}" useAzureKeyVault="true" type="Microsoft.Configuration.ConfigurationBuilders.AzureAppConfigurationBuilder, Microsoft.Configuration.ConfigurationBuilders.AzureAppConfiguration, Version=1.0.0.0, Culture=neutral, PublicKeyToken=xxxxxxxxx" />
</builders>
</configBuilders>
您可以通过定义多个配置生成器来解决此问题。第一个构建器将获得所有密钥(尽管文档建议它只能是没有标签的密钥(。第二个构建器将使用特定于环境的键/值覆盖任何以前的键/数值。请注意,标记中的顺序对于覆盖发生的顺序也很重要。
<configBuilders>
<builders>
<add name="SomeAzureAppConfigStoreNoLabel"
labelFilter=""
mode="Greedy" prefix="My.App:" stripPrefix="true" connectionString="${MyConnectionString}" useAzureKeyVault="true" type="Microsoft.Configuration.ConfigurationBuilders.AzureAppConfigurationBuilder, Microsoft.Configuration.ConfigurationBuilders.AzureAppConfiguration, Version=1.0.0.0, Culture=neutral, PublicKeyToken=xxxxxxxxx" />
<add name="SomeAzureAppConfigStoreSomeLabel"
labelFilter="SomeLabel"
mode="Greedy" prefix="My.App:" stripPrefix="true" connectionString="${MyConnectionString}" useAzureKeyVault="true" type="Microsoft.Configuration.ConfigurationBuilders.AzureAppConfigurationBuilder, Microsoft.Configuration.ConfigurationBuilders.AzureAppConfiguration, Version=1.0.0.0, Culture=neutral, PublicKeyToken=xxxxxxxxx" />
</builders>
</configBuilders>
<appSettings configBuilders="SomeAzureAppConfigStoreNoLabel,SomeAzureAppConfigStoreSomeLabel">
问题的解决方案是使用多个标签。如果将"%00"设置为标签之一,则它被视为空标签。然后,它将加载这两组标签,根据它们的设置顺序,将使用其他4个标签,而不是未标记的版本。