在 ASP.NET Core 底下讀取 appsettings.json 其實很容易,但常常要用到時就會想不起來,故做個筆記。

以下是 appsettings.json 檔案的範例:

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information"
    }
  },
  "AllowedHosts": "*",
  "Aaa3": "test value",
  "Obj": {
    "Field1": "1",
    "Field2": "2"
  }
}

我寫了一個簡單的 helper,讓 Controller 跟 ASP.NET Core 的 IConfiguration 沒有相依性:

using Microsoft.Extensions.Configuration;

namespace FileUploadWebAP.Helpers
{
    public static class Utilities
    {
        public static IConfiguration Configuration = null;

        public static T GetValueFromAppSettingsAndByKey<T>(string key)
        {
            return Configuration.GetSection(key).Get<T>();
        }

        public static string GetValueByKey(string key)
        {
            return Configuration.GetValue<string>(key);
        }
    }
}

這支 helper 的功能很簡單,就提供兩個函式,分別可以取得字串或物件,以下是設定方法及使用方式:

在 Startup.cs 中:

public void ConfigureServices(IServiceCollection services)
{
    services.AddControllersWithViews();

    Helpers.Utilities.Configuration = Configuration;
}

使用方式:

public class TestClass
{
    public string Field1 { get; set; }
    public string Field2 { get; set; }
}

string aaa3 = Helpers.Utilities.GetValueByKey("Aaa3");
string val = Helpers.Utilities.GetValueByKey("Obj:Field1");
TestClass inst = Helpers.Utilities.GetValueFromAppSettingsAndByKey<TestClass>("Obj");