ヒント
このコンテンツは電子ブック、Azure の「ASP.NET Web Forms 開発者向け Blazor」からの抜粋です。これは .NET Docs から閲覧するか、オフラインで読める無料ダウンロードの PDF としても入手できます。
Web フォームでアプリ構成を読み込む主な方法は、サーバー上の web.config ファイル内のエントリ、または web.configによって参照される関連する構成ファイルです。静的 ConfigurationManager
オブジェクトを使用して、アプリ設定、データ リポジトリ接続文字列、およびアプリに追加されるその他の拡張構成プロバイダーを操作できます。 次のコードに示すように、アプリ構成との対話を確認するのが一般的です。
var configurationValue = ConfigurationManager.AppSettings["ConfigurationSettingName"];
var connectionString = ConfigurationManager.ConnectionStrings["MyDatabaseConnectionName"].ConnectionString;
ASP.NET Core とサーバー側の Blazorでは、アプリが Windows IIS サーバーでホストされている場合、 web.config ファイルが存在する可能性があります。 ただし、この構成との対話 ConfigurationManager
はなく、他のソースからより構造化されたアプリ構成を受け取ることができます。 構成の収集方法と、 web.configファイルから 構成情報に引き続きアクセスする方法を見てみましょう。
設定情報源
ASP.NET Core では、アプリに使用できる構成ソースが多数あることが認識されます。 フレームワークは、既定でこれらの機能のベストを提供しようとします。 構成は、ASP.NET Core によってこれらのさまざまなソースから読み取られ、集計されます。 同じ構成キーの後で読み込まれた値が、以前の値よりも優先されます。
ASP.NET Core は、クラウドに対応し、オペレーターと開発者の両方にとってアプリの構成を容易にするように設計されています。 ASP.NET Core は環境に対応しており、 Production
または Development
環境で実行されているかどうかを認識します。 環境インジケーターは、 ASPNETCORE_ENVIRONMENT
システム環境変数で設定されます。 値が構成されていない場合、アプリは既定で Production
環境で実行されます。
アプリは、環境の名前に基づいて、複数のソースから構成をトリガーして追加できます。 既定では、構成は次のリソースから一覧表示された順序で読み込まれます。
- ファイルappsettings.json (存在する場合)
- appsettings。{ENVIRONMENT_NAME}.json ファイル (存在する場合)
- ディスク上のユーザー シークレット ファイル (存在する場合)
- 環境変数
- コマンドライン引数
appsettings.json 形式とアクセス
appsettings.json ファイルは、次の JSON のような構造の値を使用して階層化できます。
{
"section0": {
"key0": "value",
"key1": "value"
},
"section1": {
"key0": "value",
"key1": "value"
}
}
上記の JSON が表示されると、構成システムは子値をフラット化し、その完全修飾階層パスを参照します。 階層内の各プロパティは、コロン (:
) 文字で区切られます。 たとえば、構成キー section1:key0
は、 section1
オブジェクト リテラルの key0
値にアクセスします。
ユーザー シークレット
ユーザー シークレットは次のとおりです。
- アプリ開発フォルダーの外部にある開発者のワークステーション上の JSON ファイルに格納される構成値。
-
Development
環境で実行されている場合にのみ読み込まれます。 - 特定のアプリに関連付けられています。
- .NET CLI の
user-secrets
コマンドを使用して管理します。
user-secrets
コマンドを実行して、シークレット ストレージ用にアプリを構成します。
dotnet user-secrets init
上記のコマンドは、プロジェクト ファイルに UserSecretsId
要素を追加します。 この要素には GUID が含まれています。GUID は、シークレットをアプリに関連付けるために使用されます。 その後、 set
コマンドを使用してシークレットを定義できます。 例えば次が挙げられます。
dotnet user-secrets set "Parent:ApiKey" "12345"
上記のコマンドを実行すると、 Parent:ApiKey
構成キーが開発者のワークステーションで使用できるようになり、値が 12345
。
ユーザー シークレットの作成、格納、管理の詳細については、ASP.NET Core ドキュメントの開発中のアプリ シークレットの安全なストレージ に関するページを参照してください。
環境変数
アプリ構成に読み込まれる次の値のセットは、システムの環境変数です。 これで、システムのすべての環境変数設定に構成 API を使用してアクセスできるようになりました。 階層型の値は、アプリ内で読み取るとフラット化され、コロン文字で区切られます。 ただし、一部のオペレーティング システムでは、コロン文字の環境変数名を使用できません。 ASP.NET Core では、二重アンダースコア (__
) を持つ値をアクセス時にコロンに変換することで、この制限に対処します。 上記のユーザー シークレット セクションの Parent:ApiKey
値は、環境変数 Parent__ApiKey
でオーバーライドできます。
コマンドライン引数
構成は、アプリの起動時にコマンド ライン引数として指定することもできます。 設定する構成値の名前と構成する値を示すには、二重ダッシュ (--
) またはスラッシュ (/
) 表記を使用します。 構文は次のコマンドのようになります。
dotnet run CommandLineKey1=value1 --CommandLineKey2=value2 /CommandLineKey3=value3
dotnet run --CommandLineKey1 value1 /CommandLineKey2 value2
dotnet run Parent:ApiKey=67890
web.config が復帰する
アプリを IIS 上の Windows に展開した場合でも、 web.config ファイルはアプリを管理するように IIS を構成します。 既定では、IIS は ASP.NET Core Module (ANCM) への参照を追加します。 ANCM は、Kestrel Web サーバーの代わりにアプリをホストするネイティブ IIS モジュールです。 この web.configセクションは 、次の XML マークアップに似ています。
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<___location path="." inheritInChildApplications="false">
<system.webServer>
<handlers>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
</handlers>
<aspNetCore processPath=".\MyApp.exe"
stdoutLogEnabled="false"
stdoutLogFile=".\logs\stdout"
hostingModel="inprocess" />
</system.webServer>
</___location>
</configuration>
アプリ固有の構成は、environmentVariables
要素にaspNetCore
要素を入れ子にすることで定義できます。 このセクションで定義されている値は、環境変数として ASP.NET Core アプリに表示されます。 環境変数は、アプリの起動のそのセグメント中に適切に読み込まれます。
<aspNetCore processPath="dotnet"
arguments=".\MyApp.dll"
stdoutLogEnabled="false"
stdoutLogFile=".\logs\stdout"
hostingModel="inprocess">
<environmentVariables>
<environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Development" />
<environmentVariable name="Parent:ApiKey" value="67890" />
</environmentVariables>
</aspNetCore>
アプリでの構成の読み取り
ASP.NET Core は、 IConfiguration インターフェイスを介してアプリの構成を提供します。 この構成インターフェイスは、 Blazor コンポーネント、 Blazor ページ、および構成へのアクセスを必要とするその他の ASP.NET Core マネージド クラスによって要求される必要があります。 ASP.NET Core フレームワークは、このインターフェイスに、先ほど構成した解決済みの構成を自動的に設定します。
Blazor ページまたはコンポーネントの Razor マークアップでは、次のようにIConfiguration
ファイルの先頭に @inject
ディレクティブを含む オブジェクトを挿入できます。
@inject IConfiguration Configuration
この前のステートメントにより、 IConfiguration
オブジェクトは、Razor テンプレートの残りの部分で Configuration
変数として使用できるようになります。
インデクサー パラメーターとして求められる構成設定階層を指定することで、個々の構成設定を読み取ることができます。
var mySetting = Configuration["section1:key0"];
構成セクション全体をフェッチするには、 GetSection メソッドを使用して、前の例から section1 の構成を取得する GetSection("section1")
のような構文を使用して、特定の場所にあるキーのコレクションを取得します。
厳密に型指定された構成
Web フォームでは、 ConfigurationSection 型と関連付けられた型から継承された厳密に型指定された構成型を作成できます。
ConfigurationSection
を使用すると、これらの構成値に対して一部のビジネス ルールと処理を構成できます。
ASP.NET Core では、構成値を受け取るクラス階層を指定できます。 これらのクラスは次のようなものです。
- 親クラスから継承する必要はありません。
- キャプチャする構成構造のプロパティと型参照に一致する
public
プロパティを含める必要があります。
前の appsettings.json サンプルでは、次のクラスを定義して値をキャプチャできます。
public class MyConfig
{
public MyConfigSection section0 { get; set;}
public MyConfigSection section1 { get; set;}
}
public class MyConfigSection
{
public string key0 { get; set; }
public string key1 { get; set; }
}
このクラス階層は、Startup.ConfigureServices
メソッドに次の行を追加することで設定できます (またはbuilder.Services
の代わりに services
プロパティを使用して、Program.cs内の適切な場所)。
services.Configure<MyConfig>(Configuration);
アプリの残りの部分では、@inject
型の Razor テンプレートのクラスまたはIOptions<MyConfig>
ディレクティブに入力パラメーターを追加して、厳密に型指定された構成設定を受け取ることができます。
IOptions<MyConfig>.Value
プロパティは、構成設定から設定されたMyConfig
値を生成します。
@inject IOptions<MyConfig> options
@code {
var MyConfiguration = options.Value;
var theSetting = MyConfiguration.section1.key0;
}
オプション機能の詳細については、ASP.NET Core のオプション パターン ドキュメントを参照してください。
.NET