ASP.NET Core 的設定檔案、Secret Manager

April 6, 2024

本文要介紹 ASP.NET Core 專案的設定檔案,其與舊有的 ASP.NET 專案有很大的不同。最大的差異是改用了 JSON 格式,比舊有的 XML 格式體積更小、更容易閱讀。

設定檔案

可以透過 appsettings.json 檔案設定專案需要的設定值。以下是一個 appsettings.json  範例檔案:

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information"
    }
  },
  "AppSettings": {
    "AppTitle": "MyApp",
    "Environment": "Development",
    "Version": "1.0"
  }
}

可以使用以下的程式碼取得 appsettings.json  內的設定值:

public class Repository: IRepository
{
    // 需要加入 using Microsoft.Extensions.Configuration;
    private readonly IConfiguration Configuration;

    // 注入 IConfiguration 類別
    public Repository(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public void DoSomething()
    {
        var title = Configuration["AppSettings:AppTitle"];
        var defaultLogLevel = Configuration["Logging:LogLevel:Default"];
    }
}

也可以使用 builder.Configuration.AddJsonFile() 方法加入自訂的設定檔。

用 Secret Manager 儲存秘密設定

為了避免將機密簽入至版本控制系統,不能將帳號、密碼或是其它重要的資訊存放在 appsettings.json  內。可以建立 secrets.json  解決此問題。

在專案目錄下,使用命令列執行初始化和設定的指令,就會建立預設的 secrets.json 檔案,其效用和 appsettings.json 相同。需注意此檔案仍是使用明碼儲存資料,存放的密碼仍建議要先加密過。

dotnet user-secrets init
dotnet user-secrets set "userName" "lazy"

產生時會告知一組隨機的 user_secrets_id,預設會存放在 %APPDATA%\Microsoft\UserSecrets\<user_secrets_id>\secrets.json 內,可自行編輯。

存取順序

  1. secrets.json
  2. appsettings.{Environment}.json,例如 appsettings.Production.json
  3. appsettings.json

有重複的設定值時,優先使用數字較低的設定檔內的設定值。

參考資料