使用ConfigurationBuilder

时间:2017-04-24 15:33:06

标签: asp.net-core asp.net-core-mvc azure-web-sites asp.net-core-1.0 azure-app-service-plans

我们将一些敏感密钥和连接字符串存储在Web App应用程序设置下的连接字符串部分中:

Connection strings Azure Web App

我们使用ConfigurationBuilder

检索配置设置
Configuration = new ConfigurationBuilder()
    .SetBasePath(environment.ContentRootPath)
    .AddEnvironmentVariables()
    .Build();

我希望AddEnvironmentVariables()能够获取这些连接字符串,但事实并非如此。请注意,如果您在Web App中将这些值设置为“应用程序设置”,则此功能可用。

仔细观察(使用Kudu控制台)我发现为这些连接字符串设置的环境变量的前缀是 CUSTOMCONNSTR _

CUSTOMCONNSTR_MongoDb:ConnectionString=...
CUSTOMCONNSTR_Logging:ConnectionString=...
CUSTOMCONNSTR_ApplicationInsights:ChronosInstrumentationKey=...

我现在应该如何使用ConfigurationBuilder读取这些连接字符串?

修改

我发现AddEnvironmentVariables参数存在一个方便的prefix重载,描述如下:

//   prefix:
//     The prefix that environment variable names must start with. The prefix will be
//     removed from the environment variable names.

但是将.AddEnvironmentVariables("CUSTOMCONNSTR_")添加到配置构建器也不起作用!

2 个答案:

答案 0 :(得分:1)

它应该可以工作,它在我的示例应用程序中为我做了:https://github.com/davidebbo-test/AspNetCoreDemo。具体做法是:

  • MyDatabase连接字符串已定义为here
  • 使用here
  • 如果您在Azure门户中定义MyDatabase conn字符串,您将在运行时看到新值(转到“关于”页面)。

首先要确认我的工作是否有效,并试着看看你的做法有何不同。 您永远不需要对CUSTOMCONNSTR_前缀做出任何假设!

答案 1 :(得分:1)

  

但是将.AddEnvironmentVariables(“CUSTOMCONNSTR_”)添加到配置构建器也不起作用!

带前缀的AddEnvironmentVariables只添加必须带有指定前缀的环境变量的限制。它不会改变环境变量。

要从连接字符串配置中检索值,您可以使用以下代码。

self.myAwesomeSlider?.integerValue = Int(value)

对于分层结构设置,请将其添加到应用程序设置,而不是Azure门户上的连接字符串。

  

我现在应该如何使用ConfigurationBuilder读取这些连接字符串?

作为一种变通方法,您可以在获取连接字符串后重新添加EnvironmentVariable并重建ConfigurationBuilder。以下代码供您参考。

Configuration.GetConnectionString("MongoDb:ConnectionString");