diff --git a/src/Microsoft.FeatureManagement/FeatureManager.cs b/src/Microsoft.FeatureManagement/FeatureManager.cs index 3cb35c7a..9a80a3fe 100644 --- a/src/Microsoft.FeatureManagement/FeatureManager.cs +++ b/src/Microsoft.FeatureManagement/FeatureManager.cs @@ -418,15 +418,6 @@ private async ValueTask IsEnabledAsync(FeatureDefinition feature } else { - // - // Ensure no conflicts in the feature definition - if (featureDefinition.RequirementType == RequirementType.All && _options.IgnoreMissingFeatureFilters) - { - throw new FeatureManagementException( - FeatureManagementError.Conflict, - $"The 'IgnoreMissingFeatureFilters' flag cannot be used in combination with a feature of requirement type 'All'."); - } - // // If the requirement type is all, we default to true. Requirement type All will end on a false enabled = featureDefinition.RequirementType == RequirementType.All; @@ -491,6 +482,15 @@ private async ValueTask IsEnabledAsync(FeatureDefinition feature Logger?.LogWarning(FeatureFilterNotFoundError, featureFilterConfiguration.Name, featureDefinition.Name); + // + // If requirement type is All, a missing filter means the feature cannot be enabled + if (featureDefinition.RequirementType == RequirementType.All) + { + enabled = false; + + break; + } + continue; } diff --git a/tests/Tests.FeatureManagement/FeatureManagementTest.cs b/tests/Tests.FeatureManagement/FeatureManagementTest.cs index 12178672..630e906b 100644 --- a/tests/Tests.FeatureManagement/FeatureManagementTest.cs +++ b/tests/Tests.FeatureManagement/FeatureManagementTest.cs @@ -796,7 +796,7 @@ public async Task UsesRequirementType() } [Fact] - public async Task RequirementTypeAllExceptions() + public async Task RequirementTypeAllWithIgnoreMissingFeatureFilters() { IConfiguration config = new ConfigurationBuilder().AddJsonFile("appsettings.json").Build(); @@ -816,12 +816,12 @@ public async Task RequirementTypeAllExceptions() IFeatureManager featureManager = serviceProvider.GetRequiredService(); + // + // AllFilterFeature has RequirementType.All with missing filters. + // With IgnoreMissingFeatureFilters enabled, the feature should be treated as disabled. string allFilterFeature = Features.AllFilterFeature; - await Assert.ThrowsAsync(async () => - { - await featureManager.IsEnabledAsync(allFilterFeature); - }); + Assert.False(await featureManager.IsEnabledAsync(allFilterFeature)); } [Fact]