![](/img/trans.png)
[英]How to get Azure App Configuration feature flag value list in bicep template
[英]Setting/Adding Feature flag in Azure App Configuration
有没有办法从 Service Fabric 应用程序设置/添加功能标志。 据我搜索,更改和添加功能标志的唯一方法是通过门户进行。 有没有办法通过代码本身来做到这一点。
您可以使用以下代码片段创建功能标志
var client = new ConfigurationClient(_configuration.GetConnectionString("AppConnectionString"));
var settingToCreate = new ConfigurationSetting(Key, Value);
settingToCreate.ContentType = "application/vnd.microsoft.appconfig.ff+json;charset=utf-8";
client.SetConfigurationSetting(settingToCreate);
请注意,ConfigurationSetting 上的 ContentType 属性与代码片段中提供的功能标志相同。
Key =.appconfig.featureflag/"你的功能标志名称"
Value = { "id": "你的功能标志名称", "description": "", "enabled": true, "conditions": { "client_filters": [ { "name": "Microsoft.Targeting", "parameters ": { "Audience": { "Users": [], "Groups": [], "DefaultRolloutPercentage": 50 } } ] } }
以编程方式获取和设置 azure 功能标志状态(在自动化测试中很有用)
功能标志 json 键值采用以下格式。
{
"id": "Feature-EnableClientRegistration",
"description": "Enables client registration journey if selected otherwise disables.",
"enabled": false,
"conditions": null
}
public class FeatureManagementService : IFeatureManagementService
{
private const string AZURE_APP_CONFIG_KEY_IDENTIFIER = ".appconfig.featureflag";
private const string AZURE_FEATURE_MANAGEMENT_CONTENT_TYPE = "application/vnd.microsoft.appconfig.ff+json;charset=utf-8";
internal class FeatureFlagModel
{
[JsonPropertyName("id")]
public string Id { get; set; }
[JsonPropertyName("description")]
public string Description { get; set; }
[JsonPropertyName("enabled")]
public bool Enabled { get; set; }
[JsonPropertyName("conditions")]
public object Conditions { get; set; }
}
public string Label { get; init; }
private readonly ConfigurationClient client;
public FeatureManagementService(string connectionStr, string label)
{
client = new ConfigurationClient(connectionStr);
Label = label;
}
public bool GetFlagStatus(string featureFlagId)
{
var key = GetAppConfigFeatureFlagKey(featureFlagId);
var configSettings = GetAppConfigFeatureFlagSetting(key, string.Empty, Label);
var response = client.GetConfigurationSetting(configSettings);
var model = JsonSerializer.Deserialize<FeatureFlagModel>(response.Value.Value);
return model.Enabled;
}
public void SetFlagStatus(string featureFlagId, bool isEnabled)
{
var key = GetAppConfigFeatureFlagKey(featureFlagId);
var model = new FeatureFlagModel
{
Id = featureFlagId,
Description = FeatureConstants.GetDescription(featureFlagId),
Enabled = isEnabled,
Conditions = default
};
var value = JsonSerializer.Serialize(model);
var configSettings = GetAppConfigFeatureFlagSetting(key, value, Label);
client.SetConfigurationSetting(configSettings);
}
private static string GetAppConfigFeatureFlagKey(string featureFlagId) =>
$"{AZURE_APP_CONFIG_KEY_IDENTIFIER}/{featureFlagId}";
private static ConfigurationSetting GetAppConfigFeatureFlagSetting(
string key, string value, string label) =>
new(key, value, label)
{
ContentType = AZURE_FEATURE_MANAGEMENT_CONTENT_TYPE
};
}
public static class FeatureConstants
{
[Description("Enables client registration journey if selected otherwise disables.")]
public const string FeatureEnableClientRegistration = "Feature-EnableClientRegistration";
public static string GetDescription(string featureFlagId)
{
var comparer = StringComparison.InvariantCultureIgnoreCase;
var featureFieldInfo = typeof(FeatureConstants)
.GetFields(BindingFlags.Public | BindingFlags.Static)
.SingleOrDefault(f => featureFlagId.Equals((string)f.GetValue(null), comparer));
var featureDescription = featureFieldInfo?
.GetCustomAttribute<DescriptionAttribute>(true)?
.Description ?? string.Empty;
return featureDescription;
}
}
var connectionStr = "Endpoint=https://*<placeholder>*.azconfig.io;Id=*<placeholder>*;Secret=*<placeholder>*";
var service = new FeatureManagementService(connectionStr, "Stagging");
var isEnabled = service.GetFlagStatus("Feature-EnableClientRegistration");
service.SetFlagStatus("Feature-EnableClientRegistration", !isEnabled);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.