From 59d81be9848c67894e5d37de9c476e036e5a8098 Mon Sep 17 00:00:00 2001 From: Anton Gogolev Date: Wed, 9 Oct 2019 13:53:08 +0300 Subject: [PATCH] Add support for Environment Variables in Connection Strings Connection strings from both `connectionStrings` and `appSettings` can now use `%ENVIRONMENT_VARIABLE%` references --- src/Shared/ProviderConfiguration.cs | 6 +++++- .../ProviderConfigurationTests.cs | 16 ++++++++++++++++ .../RedisSessionStateProviderUnitTest/app.config | 1 + 3 files changed, 22 insertions(+), 1 deletion(-) diff --git a/src/Shared/ProviderConfiguration.cs b/src/Shared/ProviderConfiguration.cs index c3423252..50fd78fb 100644 --- a/src/Shared/ProviderConfiguration.cs +++ b/src/Shared/ProviderConfiguration.cs @@ -153,6 +153,7 @@ private static string GetConnectionStringFromConfig(NameValueCollection config, string appSettingsValue = GetFromAppSetting(literalValue); if (!string.IsNullOrEmpty(appSettingsValue)) { + appSettingsValue = Environment.ExpandEnvironmentVariables(appSettingsValue); return appSettingsValue; } @@ -160,7 +161,10 @@ private static string GetConnectionStringFromConfig(NameValueCollection config, && ConfigurationManager.ConnectionStrings[literalValue] != null && !string.IsNullOrWhiteSpace(ConfigurationManager.ConnectionStrings[literalValue].ConnectionString)) { - return ConfigurationManager.ConnectionStrings[literalValue].ConnectionString; + var connectionString = ConfigurationManager.ConnectionStrings[literalValue].ConnectionString; + connectionString = Environment.ExpandEnvironmentVariables(connectionString); + + return connectionString; } return literalValue; } diff --git a/test/RedisSessionStateProviderUnitTest/ProviderConfigurationTests.cs b/test/RedisSessionStateProviderUnitTest/ProviderConfigurationTests.cs index 8e972fdd..f412786b 100644 --- a/test/RedisSessionStateProviderUnitTest/ProviderConfigurationTests.cs +++ b/test/RedisSessionStateProviderUnitTest/ProviderConfigurationTests.cs @@ -238,6 +238,22 @@ public void GetConnectionString_Valid() config.Add(settingsMethodName, "GetSettings"); Assert.Equal("localhost:6380", ProviderConfiguration.GetConnectionString(config)); } + + [Fact] + public void UseConnectionStringByNameWithEnvironmentVariables() + { + const string environmentVariableName = "__ASPNET_REDIS_CONNECTION_STRING__"; + const string expectedConnectionString = "localhost:6380,localhost:6381"; + + Environment.SetEnvironmentVariable(environmentVariableName, expectedConnectionString); + + NameValueCollection config = new NameValueCollection(); + config.Add("connectionString", "RedisSession2"); + Assert.Equal(expectedConnectionString, + ProviderConfiguration.ProviderConfigurationForSessionState(config).ConnectionString); + + Environment.SetEnvironmentVariable(environmentVariableName, null); + } } public class Logger diff --git a/test/RedisSessionStateProviderUnitTest/app.config b/test/RedisSessionStateProviderUnitTest/app.config index ab225601..9cdbbfa3 100644 --- a/test/RedisSessionStateProviderUnitTest/app.config +++ b/test/RedisSessionStateProviderUnitTest/app.config @@ -2,6 +2,7 @@ +