檢查 appsettings.json 的工作原理

更新頁 :
頁面創建日期 :

環境

Visual Studio
  • Visual Studio 2019
ASP.NET酷
  • 3.0
  • 3.1

入門

創建新的 ASP.NET Core 專案時,應用集.jsonappsettings。 開發.json設定檔 包含在專案中。

此處設置的內容使用appsettings.json中設置的參數。 在開發過程中,同一鍵的參數是應用程式設置。 使用開發人員.json設置覆蓋的內容。

image

我想在本文中看到如何切換和載入它們。

編輯以檢查行為

嘗試向每個配置檔添加參數,以查看其工作原理。 為每個測試物件添加一個部分,並添加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"設置。

image

選擇開發端的原因是,在運行ASP.NET Core 應用時載入環境變數。 設置為ASPNETCORE_ENVIRONMENT的參數設置為應用。 XXXX.json 將載入與XXXX部分匹配的設定檔。

在調試期間,開發人員已設置,這是專案屬性的調試選項卡, 您可以看到環境變數已設置。

image

如果嘗試將此值更改為其他值,然後執行除錯,則 我認為,我們可以確保開發人員不會載入根端。

image

順便說一下,此參數沒有在調試或發佈中隔離,因此,即使使用發佈執行調試, 使用開發參數。 不能像在 Web.config 中那樣在調試或發佈中劃分它們,但您可以註冊多個配置檔。 您可以切換以回應操作,例如檢查發佈時的設置。

部署到 IIS 並執行

那麼,如果將其部署到IIS並運行,會發生什麼情況? 實際上,在IIS中創建網站並放置程式。

image

這將使用預期的路由設置。 因此,在IIS中部署程式時,無需擔心開發人員設置。

image

如果 IIS 在 ASPNETCORE_ENVIRONMENT 環境變數中具有任何值,則可以在運行時載入配置檔。 從網站設置打開配置編輯器。

image

從「系統.webServer」部分中選擇aspNetCore。

image

從位置選擇應用程式主機.config。

image

打開環境變數的集合。

image

添加集合。

image

在名稱中輸入 ASPNETCORE_ENVIRONMENT,然後鍵入要載入到值中的設定檔的名稱。

image

如果重新啟動網站並顯示 Web 螢幕,您將看到正在載入目標設定檔。

image

總結

初始配置時,在開發時應用。 如果載入了開發人員.json設置並將其部署到生產環境(如IIS), 我認為載入應用程式集.json 沒有問題。

創建專案時,只有開發,但可以創建多個應用集,也可以將開發部分更改為任何名稱。 如果有多個執行位置,則可以創建多個執行位置,然後根據環境設置 ASPNETCORE_ENVIRONMENT 以運行它。