在開發的時候一定會有機會存取陣列類型的設定值,在程式裡面通常會用複雜型別來對應這樣的設定資料,那部署到 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 設定方式,剛好被稍微卡住,稍微筆記一下,避免未來又忘記了。