檢查 appsettings.json 的工作原理
環境
- Visual Studio
-
- Visual Studio 2019
- ASP.NET酷
-
- 3.0
- 3.1
入門
創建新的 ASP.NET Core 專案時,應用集.json和appsettings。 開發.json設定檔 包含在專案中。
此處設置的內容使用appsettings.json中設置的參數。 在開發過程中,同一鍵的參數是應用程式設置。 使用開發人員.json設置覆蓋的內容。
我想在本文中看到如何切換和載入它們。
編輯以檢查行為
嘗試向每個配置檔添加參數,以查看其工作原理。 為每個測試物件添加一個部分,並添加TestValue參數。
appsettings.json 檔是使用 Shift-JIS 字符代碼編寫的,因此,如果您要輸入日語, 請用 UTF-8 保存。
appsettings.json
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"AllowedHosts": "*",
"TestObject": {
"TestValue": "Root です。",
"Comment": "日本語を使用する場合は appsettings.json を UTF-8 で保存しなおすこと。"
}
}
應用設置。 開發.json
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"TestObject": {
"TestValue": "Development です。",
"Comment": "日本語を使用する場合は appsettings.json を UTF-8 で保存しなおすこと。"
}
}
獲取HomeController.cs 索引操作中配置檔的參數。 有一種方法可以獲取類,但我喜歡它,因為它不是主題。
private readonly ILogger<HomeController> _logger;
private readonly IConfiguration _configuration;
// DI で IConfiguration を受け取る
public HomeController(ILogger<HomeController> logger, IConfiguration configuration)
{
_logger = logger;
_configuration = configuration;
}
public IActionResult Index()
{
// appsettings.json から値を取得します。
// 階層化されている場合は GetSection を使用します。
ViewData["Message"] = _configuration.GetSection("TestObject").GetValue<string>("TestValue");
return View();
}
創建、綁定和載入類時,代碼如下所示:
// クラス定義 public class TestObject { public string TestValue { get; set; } public string Comment { get; set; } } // 読み込み var testObject = _configuration.GetSection(nameof(TestObject)).Get<TestObject>();
顯示檢視端 Index.cshtml 中取得的值。
<p>appsettings.json から取得したテキストを表示</p>
<p>@ViewData["Message"]</p>
在本地執行除錯
生成並調試專案后,可以應用。 您將看到"開發.json"設置。
選擇開發端的原因是,在運行ASP.NET Core 應用時載入環境變數。 設置為ASPNETCORE_ENVIRONMENT的參數設置為應用。 XXXX.json 將載入與XXXX部分匹配的設定檔。
在調試期間,開發人員已設置,這是專案屬性的調試選項卡, 您可以看到環境變數已設置。
如果嘗試將此值更改為其他值,然後執行除錯,則 我認為,我們可以確保開發人員不會載入根端。
順便說一下,此參數沒有在調試或發佈中隔離,因此,即使使用發佈執行調試, 使用開發參數。 不能像在 Web.config 中那樣在調試或發佈中劃分它們,但您可以註冊多個配置檔。 您可以切換以回應操作,例如檢查發佈時的設置。
部署到 IIS 並執行
那麼,如果將其部署到IIS並運行,會發生什麼情況? 實際上,在IIS中創建網站並放置程式。
這將使用預期的路由設置。 因此,在IIS中部署程式時,無需擔心開發人員設置。
如果 IIS 在 ASPNETCORE_ENVIRONMENT 環境變數中具有任何值,則可以在運行時載入配置檔。 從網站設置打開配置編輯器。
從「系統.webServer」部分中選擇aspNetCore。
從位置選擇應用程式主機.config。
打開環境變數的集合。
添加集合。
在名稱中輸入 ASPNETCORE_ENVIRONMENT,然後鍵入要載入到值中的設定檔的名稱。
如果重新啟動網站並顯示 Web 螢幕,您將看到正在載入目標設定檔。
總結
初始配置時,在開發時應用。 如果載入了開發人員.json設置並將其部署到生產環境(如IIS), 我認為載入應用程式集.json 沒有問題。
創建專案時,只有開發,但可以創建多個應用集,也可以將開發部分更改為任何名稱。 如果有多個執行位置,則可以創建多個執行位置,然後根據環境設置 ASPNETCORE_ENVIRONMENT 以運行它。