in src/Microsoft.Extensions.Configuration.AzureAppConfiguration/FeatureManagement/FeatureFlagOptions.cs [84:129]
public FeatureFlagOptions Select(string featureFlagFilter, string labelFilter = LabelFilter.Null, IEnumerable<string> tagFilters = null)
{
if (string.IsNullOrEmpty(featureFlagFilter))
{
throw new ArgumentNullException(nameof(featureFlagFilter));
}
if (featureFlagFilter.EndsWith(@"\*"))
{
throw new ArgumentException(@"Feature flag filter should not end with '\*'.", nameof(featureFlagFilter));
}
if (string.IsNullOrWhiteSpace(labelFilter))
{
labelFilter = LabelFilter.Null;
}
// Do not support * and , for label filter for now.
if (labelFilter.Contains('*') || labelFilter.Contains(','))
{
throw new ArgumentException("The characters '*' and ',' are not supported in label filters.", nameof(labelFilter));
}
if (tagFilters != null)
{
foreach (string tag in tagFilters)
{
if (string.IsNullOrEmpty(tag) || !tag.Contains('=') || tag.IndexOf('=') == 0)
{
throw new ArgumentException($"Tag filter '{tag}' does not follow the format \"tagName=tagValue\".", nameof(tagFilters));
}
}
}
string featureFlagPrefix = FeatureManagementConstants.FeatureFlagMarker + featureFlagFilter;
FeatureFlagSelectors.AppendUnique(new KeyValueSelector
{
KeyFilter = featureFlagPrefix,
LabelFilter = labelFilter,
TagFilters = tagFilters,
IsFeatureFlagSelector = true
});
return this;
}