[筆記] 在 App Service 設定陣列組態

  • 106
  • 0

在開發的時候一定會有機會存取陣列類型的設定值,在程式裡面通常會用複雜型別來對應這樣的設定資料,那部署到 App Service 如果要透過組態來設定陣列值的話因為沒辦法像設定 appsetting.json 那樣方便,會需要採用 key 值的方式來設定,平常又是透過強型別來存取陣列設定,反而不熟悉存取陣列 key 值的方式而卡了一下,因此筆記一下設定的方式。

實做

首先準備兩種類型的陣列資料,一個是字串陣列,一個是複雜型別。

  "WeekList": [
    "Sunday",
    "Monday",
    "Tuesday",
    "Wednesday",
    "Thursday",
    "Friday",
    "Saturday"
  ],
  "EmailList": [
    {
      "Name": "AnYun",
      "Address": "anyun@sample.com"
    },
    {
      "Name": "Sam",
      "Address": "sam@sample.com"
    }
  ]

再來準備一個類別來對應設定。

public class EmailAddress
{
    public string Name { get; set; }
    public string Address { get; set; }
}

再來開一個 ASP.NET MVC 專案,並且注入 IConfiguration 來存取陣列設定。

_configuration.GetSection("WeekList").Get<string[]>(); // 字串陣列
_configuration.GetSection("EmailList").Get<List<EmailAddress>>(); // 複雜型別陣列

最後在 View 顯示出來。

@string.Join("、", (string[])ViewBag.WeekList)
<br />
<br />

@foreach (var email in (List<EmailAddress>)ViewBag.EmailList)
{
    <p>
        Name: @email.Name <br />
        Email: @email.Address <br />
    </p>
}

結果也如我們所預期,正確的存取到設定值。

而在 App Service 要設定陣列值的話,就要在 : 之後加上 index,如果是複雜型別的話就是再往後加上 : 把屬性加上去就可以了。

如果是 Linux 的 App Service Plan 則要使用雙底線 (__) 來做分隔,Ex:EamilList__0__Name

這樣就可以正確的設定陣列的設定值了。

結論

平常太習慣用強型別來對應設定檔案,反而會忘記要直接存取陣列或是巢狀設定的 key 設定方式,剛好被稍微卡住,稍微筆記一下,避免未來又忘記了。

參考資料