[解決済み] ASP.NET Coreで.jsonファイルからAppSettingsの値を読み込む方法
質問
AppSettingsのデータをappsettings/Config .jsonというファイルに以下のように設定しています。
{
"AppSettings": {
"token": "1234"
}
}
私は.jsonファイルからAppSettingsの値を読み取る方法についてオンラインで検索しましたが、私は有用なものを得ることができませんでした。
試してみました。
var configuration = new Configuration();
var appSettings = configuration.Get("AppSettings"); // null
var token = configuration.Get("token"); // null
ASP.NET4.0では、こんなことができるんですね。
System.Configuration.ConfigurationManager.AppSettings["token"];
しかし、ASP.NET Coreでこれを行うにはどうしたらいいのでしょうか?
どのように解決するのですか?
これには紆余曲折がありました。この回答を最新のものにするために修正したのは ASP.NET Core 2.0 (2018/02/26現在)をご覧ください。
これはほとんどから引用しています。 公式ドキュメント :
ASP.NETアプリケーションで設定を使用する場合は、設定のみをインスタンス化することをお勧めします。
Configuration
の中で、アプリケーションの
Startup
クラスがあります。そして、Optionsパターンを使って、個々の設定にアクセスします。例えば
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();
}
}
なお
appsettings.json
になります。
デフォルトで登録されている
は、.NET Core 2.0に含まれます。を登録することもできます。
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"));
}
}
関連
-
[解決済み] [Entity Framework 4.1でエンティティに関連オブジェクトを追加する際に、エンティティオブジェクトをIEntityChangeTracker.の複数のインスタンスから参照できない。
-
[解決済み] 保護レベルによりアクセス不能になりました。
-
[解決済み】「入力文字列が正しい形式ではありませんでした」エラーの解決方法は?[重複しています]。
-
[解決済み] 'IEnumerable<SelectListItem>' 型の ViewData アイテムで、キーが国であるものは存在しない。
-
[解決済み] [Solved] 不正な文字列値: '\xEFxBFxBD' for column
-
[解決済み】Nullableオブジェクトは値を持たなければならない?
-
[解決済み] Microsoft Officeをインストールせずに、C#でExcel(.XLSおよび.XLSX)ファイルを作成するにはどうすればよいですか?
-
[解決済み] .NET 4.0 プロジェクトで .NET 2.0 混合モード アセンブリを参照するために必要な「追加設定」は何ですか?
-
[解決済み] EXEを出力する.NET Coreコンソールアプリケーションを構築する
-
[解決済み] Core 2.0のConfigurationBuilderでSetBasePathを設定する方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] メンバー '<メンバー名>' にインスタンス参照でアクセスできない
-
[解決済み】C#で四捨五入する方法
-
[解決済み】ASP.NET Core Dependency Injectionのエラーです。アクティブ化しようとしているときに、タイプのサービスを解決できません。
-
[解決済み】C# - パスに不正な文字がある場合
-
[解決済み】なぜこのコードはInvalidOperationExceptionを投げるのですか?
-
[解決済み】Unity 「関連するスクリプトを読み込むことができません」「Win32Exception: システムは指定されたファイルを見つけることができません"
-
[解決済み】Moqを使用してメソッド呼び出しを検証する
-
[解決済み】画像のペイントにTextureBrushを使用する方法
-
VSでscanfエラーを恒久的に解決するには、ソースファイルを作成し、自動的に#define _CRT_SECURE_NO_WARNINGS 1を追加してください。
-
[解決済み】ユーザー設定値を別のユーザー設定値で設定する