【问题标题】:Azure App Configuration Feature Flag with Label is not retrieved by Microsoft.FeatureManagement.FeatureManagerMicrosoft.FeatureManagement.FeatureManager 未检索到带有标签的 Azure 应用程序配置功能标志
【发布时间】:2021-11-08 23:23:33
【问题描述】:

我开始在我的项目中使用 Azure 应用配置服务和功能标志功能。我看到的是,每当我定义一个新功能标志并为标签字段设置一些值时,_featureManager.GetFeatureNamesAsync(); 出于某种原因不会检索到它。 为了功能标志管理,我创建了一个FeatureFlagManager,如下所示:

public class FeatureFlagManager: IFeatureFlagManager
{
    private readonly IFeatureManager _featureManager;

    public FeatureFlagManager(IFeatureManager featureManager)
    {
        _featureManager = featureManager;
    }

    public async Task<IEnumerable<FeatureFlag>> GetFeatureFlags()
    {
        var featureList = new List<FeatureFlag>();           
        var featureNames = _featureManager.GetFeatureNamesAsync();

        await foreach (var name in featureNames)
        {
            var isEnabled = await _featureManager.IsEnabledAsync(name);
            featureList.Add(new FeatureFlag()
            {
                FeatureName = name,
                IsEnabled = isEnabled
            });
        }

        return featureList;
    }
}

REST API 端点:

[HttpGet]
[Route("featureFlags")]
[ProducesResponseType(StatusCodes.Status200OK, Type = typeof(IEnumerable<FeatureFlag>))]
[ProducesResponseType(StatusCodes.Status404NotFound)]
public async Task<IActionResult> GetFeatureFlags()
{
    using (new Tracer(Logger, $"{nameof(ConfigurationController)}.{nameof(GetFeatureFlags)}"))
    {
        return Ok(await _featureFlagManager.GetFeatureFlags());

    }
}

我在 Azure 配置中定义了 5 个功能标志:

但每当我调用我的端点以获取所有带有值的功能标志时,已定义标签的标志将被忽略;

有什么理由让它这样工作还是我错过了什么? 我注意到的另一件事是,一旦您在 Azure 中创建了新功能标志并定义了标签,就没有其他选项可以对其进行编辑。 干杯

【问题讨论】:

    标签: c# azure-app-configuration azure-feature-manager


    【解决方案1】:

    在 program.cs 中,您需要告诉配置返回带有标签的标志。

                        if (!string.IsNullOrEmpty(settings["AppConfigConnectionString"]))
                    {
                        builder.AddAzureAppConfiguration(options => {
                            options.Connect(settings["AppConfigConnectionString"]);
                            options.UseFeatureFlags(opt => opt.Label = "WHAT_EVER_LABEL_YOU_WANT");
                        });
                    }
    

    【讨论】:

    • 是的,但是当我在 Azure 中定义一个带有标签“blah”的新功能标志,然后我想动态查询我的后端 API 时,我需要先对代码进行更改才能能够找回它,对吧? opt.Label 只是一个 string 字段,所以如果我的功能标志中有许多不同的标签,我该怎么办?只是在逗号后列出它们?比如 opt.Label = "label1,label2,label3..." ?
    • 您可以在 UseFeatureFlags() 方法调用中添加所有标签。但这不是很可扩展。所以我们使用标签在不同的环境中定义相同的Flag,标签代表环境。不确定您使用标签的目的。从我读过的所有内容来看,它是在不同的情况下区分相同的标志。如果您在各个标志上的标签不相同,我会重新考虑您对标签的使用。或者只是将它们全部添加到方法调用中。
    • 好的,现在我明白了。感谢您的解释。我可以接受这个作为答案,谢谢!
    猜你喜欢
    • 2021-12-08
    • 2020-07-25
    • 1970-01-01
    • 1970-01-01
    • 2020-10-17
    • 1970-01-01
    • 2019-10-18
    • 2022-01-06
    • 1970-01-01
    相关资源
    最近更新 更多