kokoni

クラウドおじさんの備忘録

ASP.NET COREでAzureWebAppsのAppSettingsを取得する

ASP.NET COREでAzureWebAppsのAppSettingsを取得する方法について調査実装をしたのでまとめておきます。

 

appsettingの取得

まず最初の作業としてIConfigurationRootのgetterプロパティを実装しStartupのコンストラクタでConfigurationBuilderを生成します。

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

    builder.AddEnvironmentVariables();
    Configuration = builder.Build();
}

public IConfigurationRoot Configuration { get; }

 

appsettings.jsonjson形式に併せて下記のように記載します。

・appsettings.jsonの記載

{
 "AppSettings": {
  "Hello": "Hello local"
 }
}

 

・webAppsのAppSettingsの記載

Key:[AppSettings:Hello] Value:[Hello Azure]

 

・取得方法

Configuration.GetSection("AppSettings").GetValue<string>("Key");

もしくは

Configuration["AppSettings:Key:embed:cite];

 

WebAppsのAppSettingsに記載するときにjson形式でネストした場合はデリミタとして「:」をはさむ必要があります。また、ネストした場合は親Keyに当たる部分がSectionという形になるのでGetSectionしてからGetValueする必要があります。

この場合はappsettings.jsonに記載のある値よりもWebAppsのAppSettingsが優先で取得されます。ローカルでデバッグした場合はもちろん"Hello local"が取得されますが、Azureにデプロイした後はWebAppsのAppSettingsが優先されます。これは前にも記事にしましたがkuduでみるとAppSettingsの値は環境変数となるため優先されるようです。

 

今回は簡単な部分を記事にしましたが結構奥が深いので機を見てもう少し詳細な記事にしようと思います。