ASP.NET Core 練習 - 使用 appSetting
3 | 16,442 |
接續前一篇的程式改良。
ASP.NET Core 已不是用 web.config,但仍有 appSetting,網站可調參數是放在 appSettings.json,專案範本預設內容如下:
appSettings.json 裡的設定值可透過 IConfiguration 讀取,依據 ASP.NET Core 標準做法,應使用 DI 機制從建構式取得 IConfiguration 並保存供後續使用。專案範本有個現成例子是 Startup.cs,建構式就有接收 IConfiguration 存入 Configuration 屬性:
要讀取 appsettings.json 設定,寫 GetValue<T>(完整路徑) 即可以了。若參數有多層結構(例如:Logging 下的 LogLevel 下的 Default),則用冒號分隔,例如::
var allowHosts =
configuration.GetValue<string>("AllowedHosts");
var defaulLogLevel =
configuration.GetValue<string>("Logging:LogLevel:Default");
實測結果如下:
回到我的案例,把 URL 寫死在程式碼很不專業,應該搬到 appsettings.json。所以在 appsettings.json 加個 CwbApiUrl 設定如下:
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"AllowedHosts": "*",
"CwbApiUrl": "https://opendata.cwb.gov.tw/fileapi/v1/opendataapi/F-C0032-001?Authorization=...API Key...&downloadType=WEB&format=JSON"
}
SimpleWeatherService 則稍做修改,在建構式接收 Microsoft.Extensions.Configuration.IConfiguration configuration。SimpleWeatherService 在 Startup.cs ConfigureServices(IServiceCollection services) services.AddTransient<IWeatherService, SimpleWeatherService>() 被註冊到 DI 容器,ASP.NET Core DI 機構在建立 Instance 時將會傳入 IConfiguration,用 configuration.GetValue<string>("CwbApiUrl") 即可取得設定:
public class SimpleWeatherService : IWeatherService
{
readonly string openDataApiUrl;
public SimpleWeatherService(
Microsoft.Extensions.Configuration.IConfiguration configuration)
{
openDataApiUrl = configuration.GetValue<string>("CwbApiUrl");
}
//...其餘部分不變...
與 web.config 時代的做法有點差距,並也不難上手就是了。
以上便是 ASP.NET Core appSetings.json 的基本用法,下一篇我們再來聊聊非同步化。
Example of how to use appSetting in ASP.NET Core.
Comments
# by Kz
關於針對不同組態要對應不同的設定檔,似乎不像原本切換組態後再編譯就完成。我在 console 中的實作就變成要透過傳遞 args 來決定是在執行哪個環境。大大有沒有比較理想的做法呢 ??
# by 卡比
我在 linux 起了一個 service 運行 dotnet core 的 app,environment 的值放在 service 的內容裡
# by Jeffrey
to Kz, 你可以參考 https://docs.microsoft.com/zh-tw/aspnet/core/fundamentals/configuration/index?view=aspnetcore-3.1#json-configuration-provider 使用 appsettings.Development.json、appsettings.Production.json 區分不同組態的設定,而要使用何一組態可透過 ASPNETCORE_ENVIRONMENT 環境變數控制。