ASP.NET Core の .json ファイルから AppSettings 値を読み取る方法 質問する

ASP.NET Core の .json ファイルから AppSettings 値を読み取る方法 質問する

私は次のように、appsettings/Config .json ファイルに AppSettings データを設定しました。

{
  "AppSettings": {
        "token": "1234"
    }
}

.json ファイルから AppSettings 値を読み取る方法をオンラインで検索しましたが、役に立つ情報は何も得られませんでした。

私は試した:

var configuration = new Configuration();
var appSettings = configuration.Get("AppSettings"); // null
var token = configuration.Get("token"); // null

ASP.NET 4.0 では次のことが可能です:

System.Configuration.ConfigurationManager.AppSettings["token"];

しかし、ASP.NET Core でこれをどのように実行すればよいのでしょうか?

ベストアンサー1

これにはいくつかの紆余曲折がありました。この回答をASP.NET Core 2.0 (2018 年 2 月 26 日現在) に合わせて変更しました。

これは主に公式文書:

ConfigurationASP.NET アプリケーションで設定を操作するには、アプリケーションのクラスでのみインスタンス化することをお勧めします。次に、Options パターンを使用して個々の設定にアクセスします。次のようなファイルStartupがあるとします。appsettings.json

{
  "MyConfig": {
   "ApplicationName": "MyApp",
   "Version": "1.0.0"
   }

}

そして、構成を表す POCO オブジェクトがあります。

public class MyConfig
{
    public string ApplicationName { get; set; }
    public int Version { get; set; }
}

ここで、次の設定を構築しますStartup.cs

public class Startup 
{
    public IConfigurationRoot Configuration { get; set; }

    public Startup(IHostingEnvironment env)
    {
        var builder = new ConfigurationBuilder()
            .SetBasePath(env.ContentRootPath)
            .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true);

        Configuration = builder.Build();
    }
}

.NET Core 2.0 ではデフォルトで登録されるappsettings.jsonことに注意してください。必要に応じて、環境ごとに構成ファイルを登録することもできます。appsettings.{Environment}.json

設定をコントローラーに注入したい場合は、それをランタイムに登録する必要があります。これは次のように行いますStartup.ConfigureServices

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

    // Add functionality to inject IOptions<T>
    services.AddOptions();

    // Add our Config object so it can be injected
    services.Configure<MyConfig>(Configuration.GetSection("MyConfig"));
}

そして、次のように注入します。

public class HomeController : Controller
{
    private readonly IOptions<MyConfig> config;

    public HomeController(IOptions<MyConfig> config)
    {
        this.config = config;
    }

    // GET: /<controller>/
    public IActionResult Index() => View(config.Value);
}

クラス全員Startup:

public class Startup 
{
    public IConfigurationRoot Configuration { get; set; }

    public Startup(IHostingEnvironment env)
    {
        var builder = new ConfigurationBuilder()
            .SetBasePath(env.ContentRootPath)
            .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true);

        Configuration = builder.Build();
    }

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

        // Add functionality to inject IOptions<T>
        services.AddOptions();

        // Add our Config object so it can be injected
        services.Configure<MyConfig>(Configuration.GetSection("MyConfig"));
    }
}

おすすめ記事