3

我們存儲我們的一些敏感按鍵和連接字符串中的連接串中檢索Web應用程序的連接字符串下的Web App應用程序設置部分:使用ConfigurationBuilder

Connection strings Azure Web App

我們檢索使用的配置設置ConfigurationBuilder

Configuration = new ConfigurationBuilder() 
    .SetBasePath(environment.ContentRootPath) 
    .AddEnvironmentVariables() 
    .Build(); 

我本來期望AddEnvironmentVariables()拿起這些連接字符串,b它沒有。請注意,如果您在Web應用程序中將這些值設置爲「應用程序設置」,則此功能無效。

在仔細檢查(使用捻控制檯)我發現的環境變量被設置爲這些連接串都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_")的配置構建器不工作,要麼!

回答

1

但是將.AddEnvironmentVariables(「CUSTOMCONNSTR_」)添加到配置生成器也不起作用!

帶前綴的AddEnvironmentVariables只是爲必須使用指定前綴的環境變量添加限制。它不會改變環境變量。

要從連接字符串配置中檢索值,可以使用如下代碼。

Configuration.GetConnectionString("MongoDb:ConnectionString"); 

對於層次結構設置,請將其添加到應用程序設置,而不是Azure門戶上的連接字符串。

我應該如何使用ConfigurationBuilder讀取這些連接字符串?

作爲一種解決方法,您可以在獲取連接字符串後重新添加EnvironmentVariable並重新構建ConfigurationBuilder。以下代碼供您參考。

public Startup(IHostingEnvironment env) 
{ 
    var builder = new ConfigurationBuilder() 
     .SetBasePath(env.ContentRootPath) 
     .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true) 
     .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true) 
     .AddEnvironmentVariables(); 

    Configuration = builder.Build(); 
    //Add EnvironmentVariable and rebuild ConfigurationBuilder 
    Environment.SetEnvironmentVariable("MongoDb:ConnectionString", Configuration.GetConnectionString("MongoDb:ConnectionString")); 
    builder.AddEnvironmentVariables(); 
    Configuration = builder.Build(); 
} 
1

它應該只是工作,它適用於我的示例應用程序:https://github.com/davidebbo-test/AspNetCoreDemo。具體如下:

  • MyDatabase連接字符串定義爲here
  • 它用於here
  • 如果您在Azure Portal中定義了MyDatabase連接字符串,您將在運行時看到新值(轉至關於頁面)。

因此,首先驗證我的工作原理,並嘗試查看您可能會以何種方式進行改變。 你永遠不需要對CUSTOMCONNSTR_前綴做任何假設!

+0

我沒有將這些存儲在JSON文件中 - 僅在Web應用程序設置中(因此需要從環境變量中檢索它們)。爲了清楚起見,我從上面的配置中刪除了AddJsonFile()。這個About頁面在哪裏?我確實可以在env vars中看到連接字符串,但只能使用前綴鍵。 – davenewza

+0

它在我的應用程序中工作,即使沒有在JSON中設置它(即只有Azure連接字符串)。運行時,頂部有一個About鏈接。 –