Azure Web App 上的環境變數是不能直接使用 ASP.NET Core 原生的 appsettings.json 內容,因為 appsettings.json 可能是有階層結構的,而 Azure Web App 上的環境變數是扁平的,像是一筆一筆的紀錄。這時候想要將 appsettings.json 的內容套用進 Azure Web App 環境變數中時,就需要做一些調整。

在 Azure Web App 的環境變數頁面中,你可以使用進階編輯來幫助我們快速編輯多項設定:

Azure Web App 環境變數有進階編輯的功能

你會發現,使用進階編輯的 JSON 內容(右側)和 ASP.NET Core 的 appsettings.json 內容有很大的不同。

除此之外,調整上還需要注意,Azure Web App 所使用的 App Service Plan 是使用哪種作業系統,Windows 或是 Linux,因為這兩種系統所需要做的調整有些微的不同。

在 Windows 下,要將有階層結構的 appsettings.json 轉換成環境變數,除了需要壓平階層外,原本階層的關係要用:來表示,如下所示:

// 原始的 appsettings.json
{
  "AA": {
    "BB": "123"
  },
  "CC": "456"
}
// 轉換後 (Windows 版本)
{
  "name": "AA:BB",
  "value": "123",
  "slotSetting": false
},
{
  "name": "CC",
  "value": "456",
  "slotSetting": false
}

如果是使用 Linux 了話,原本階層的關係要用__(雙底線)來表示,如下所示:

// 轉換後 (Linux 版本)
{
  "name": "AA__BB",
  "value": "123",
  "slotSetting": false
},
{
  "name": "CC",
  "value": "456",
  "slotSetting": false
}

轉換規則相當簡單,不過如果有個工具幫忙轉換了話還是挺好的。下面的格式轉換功能就是為了方便轉化而設計的,輸入 appsettings.json 的內容,然後選擇作業系統,就可以快速轉換格式。


參考資料:


Poy Chang

Trial and Error