私は次のように、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 日現在) に合わせて変更しました。
これは主に公式文書:
Configuration
ASP.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"));
}
}