[小菜一碟] 如何在 IIS 上設定 ASP.NET Core 網頁應用程式的 Environment Variable(環境變數)

有考量到資訊安全的程式設計專案,通常都會要求機敏資訊,例如:連線字串、API 金鑰等等,不得直接簽入版控當中,等到應用程式要部署的時候,另外在正式環境中進行設定,這篇文章就來介紹如何在 IIS 上透過環境變數來覆寫 ASP.NET Core 網頁應用程式的組態設定。

實驗環境

我建立了一個 ASP.NET Core MVC 的網頁應用程式,有兩組設定檔 appsettings.jsonappsettings.Development.json,設定檔的內容如下:

appsettings.json

{
  "ConnectionStrings": {
    "TestConnStr": "{SQL Server Connection String}"
  },
  "TestApiKey": "{Test Api Key}"
}

appsettings.Development.json

{
  "ConnectionStrings": {
    "TestConnStr": "Server=.\\SQLExpress;Database=Test;Integrated Security=true;TrustServerCertificate=True"
  },
  "TestApiKey": "88ce118e-c33d-4866-893b-3ada93c5befc"
}

我沒有建立 appsettings.Production.json,因為我要在 IIS 上來用環境變數來進行組態設定。

在 IIS 上設定環境變數

我現在要在 IIS 上,透過環境變數設定 TestConnStrTestApiKey 的值,我們直接點選部署在 IIS 上的網站,找到 Configuration Editor 這個功能。

點擊進去之後,找到 system.webServer/aspNetCore 這個區段。

然後,右邊的來源請選擇 ApplicationHost.config <location path='網站名稱' />,這會將環境變數的設定值寫在本機的 applicationHost.config 裡面,如果是選擇 網站名稱 Web.config 則會寫在應用程式的 web.config 裡面,這有可能會隨著應用程式的更新,導致設定跑掉。

底下的 environmentVariables 就是設定環境變數的地方

點擊 ... 按鈕進入編輯畫面,按下 Add 就可以新增一個設定,如果是多階層的設定,比如 ConnectionStrings 底下的 TestConnStr,我們用雙底線 __ 來表示階層關係。

編輯設定完成後,關閉編輯畫面,最後記得按下 Apply 就生效了。

參考資料

相關資源

C# 指南
ASP.NET 教學
ASP.NET MVC 指引
Azure SQL Database 教學
SQL Server 教學
Xamarin.Forms 教學