diff --git a/src/Microsoft.Extensions.Configuration.AzureAppConfiguration/AzureAppConfigurationProvider.cs b/src/Microsoft.Extensions.Configuration.AzureAppConfiguration/AzureAppConfigurationProvider.cs index b3756309..b509bd12 100644 --- a/src/Microsoft.Extensions.Configuration.AzureAppConfiguration/AzureAppConfigurationProvider.cs +++ b/src/Microsoft.Extensions.Configuration.AzureAppConfiguration/AzureAppConfigurationProvider.cs @@ -812,8 +812,6 @@ await CallWithRequestTracing(async () => { using Response response = page.GetRawResponse(); - ETag serverEtag = (ETag)response.Headers.ETag; - foreach (ConfigurationSetting setting in page.Values) { data[setting.Key] = setting; @@ -824,7 +822,9 @@ await CallWithRequestTracing(async () => } } - matchConditions.Add(new MatchConditions { IfNoneMatch = serverEtag }); + // The ETag will never be null here because it's not a conditional request + // Each successful response should have 200 status code and an ETag + matchConditions.Add(new MatchConditions { IfNoneMatch = response.Headers.ETag }); } }).ConfigureAwait(false); diff --git a/src/Microsoft.Extensions.Configuration.AzureAppConfiguration/Extensions/ConfigurationClientExtensions.cs b/src/Microsoft.Extensions.Configuration.AzureAppConfiguration/Extensions/ConfigurationClientExtensions.cs index a50b4d45..c4edfb0e 100644 --- a/src/Microsoft.Extensions.Configuration.AzureAppConfiguration/Extensions/ConfigurationClientExtensions.cs +++ b/src/Microsoft.Extensions.Configuration.AzureAppConfiguration/Extensions/ConfigurationClientExtensions.cs @@ -95,11 +95,9 @@ public static async Task HaveCollectionsChanged(this ConfigurationClient c { using Response response = page.GetRawResponse(); - ETag serverEtag = (ETag)response.Headers.ETag; - // Return true if the lists of etags are different if ((!existingMatchConditionsEnumerator.MoveNext() || - !existingMatchConditionsEnumerator.Current.IfNoneMatch.Equals(serverEtag)) && + !existingMatchConditionsEnumerator.Current.IfNoneMatch.Equals(response.Headers.ETag)) && response.Status == (int)HttpStatusCode.OK) { return true; diff --git a/tests/Tests.AzureAppConfiguration/Azure.Core.Testing/MockResponse.cs b/tests/Tests.AzureAppConfiguration/Azure.Core.Testing/MockResponse.cs index aaee0b9c..c60c2a25 100644 --- a/tests/Tests.AzureAppConfiguration/Azure.Core.Testing/MockResponse.cs +++ b/tests/Tests.AzureAppConfiguration/Azure.Core.Testing/MockResponse.cs @@ -18,7 +18,10 @@ public MockResponse(int status, string reasonPhrase = null) Status = status; ReasonPhrase = reasonPhrase; - AddHeader(new HttpHeader(HttpHeader.Names.ETag, "\"" + Guid.NewGuid().ToString() + "\"")); + if (status == 200) + { + AddHeader(new HttpHeader(HttpHeader.Names.ETag, "\"" + Guid.NewGuid().ToString() + "\"")); + } } public override int Status { get; } diff --git a/tests/Tests.AzureAppConfiguration/RefreshTests.cs b/tests/Tests.AzureAppConfiguration/RefreshTests.cs index e18e8453..af6dd11d 100644 --- a/tests/Tests.AzureAppConfiguration/RefreshTests.cs +++ b/tests/Tests.AzureAppConfiguration/RefreshTests.cs @@ -1069,7 +1069,7 @@ public async Task RefreshTests_SelectedKeysRefreshWithRegisterAll() .AddAzureAppConfiguration(options => { options.ClientManager = TestHelpers.CreateMockedConfigurationClientManager(mockClient.Object); - options.Select("TestKey*"); + options.Select("TestKey*", "label"); options.ConfigurationSettingPageIterator = new MockConfigurationSettingPageIterator(); options.ConfigureRefresh(refreshOptions => { @@ -1159,7 +1159,7 @@ MockAsyncPageable GetTestKeys(SettingSelector selector, CancellationToken ct) .AddAzureAppConfiguration(options => { options.ClientManager = TestHelpers.CreateMockedConfigurationClientManager(mockClient.Object); - options.Select("TestKey*"); + options.Select("TestKey*", "label"); options.ConfigurationSettingPageIterator = new MockConfigurationSettingPageIterator(); options.ConfigureRefresh(refreshOptions => {