データベース接続文字列を appsettings.json に記述してアプリケーションで読み込む - ASP.NET Core

データベース接続文字列を appsettings.json に記述してアプリケーションで読み込むコードを紹介します。

概要

従来のASP.NETアプリケーション(Web Forms)では、 データベース接続文字列を、Web.©onfigファイルのconfigurationタグのconnectionStringsタグ内に記述する方法が一般的でした。 (参照)

ASP.NET Coreアプリケーションの場合は、Web.configファイルではなく、appsettings.json ファイルにJSON形式でデータベース接続文字列を記述する方法が一般的になります。 この記事では、appsettings.jsonにデータベース接続文字列を記述し、ASP.NETアプリケーションから読み込むコードを紹介します。

プログラムの作成

ASP.NET Coreの空アプリケーションを作成します。

appsettings.json への設定の追加

appsettings.json ファイルに ConnectionStrings キーのオブジェクトを追加しキー内に、キーとデータベース接続文字列の値を記述します。 今回の例では、キー名をDBConnectString としています。
appsettings.json (変更前)
{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "AllowedHosts": "*"
}
appsettings.json (変更後)
{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "ConnectionStrings": {
    "DBConnectString": "Data Source=192.168.0.1; Initial Catalog=(DatabaseName);Connect Timeout=1000;Persist Security Info=True; User ID=(UserID);Password=(Pass);Max Pool Size=250;Encrypt=False"
  },
  "AllowedHosts": "*"
}

データベース接続文字列の読み込み (WebApplicationから)

WebApplicationオブジェクトにアクセスできる場合は、WebApplicationクラスのConfigurationプロパティのGetConnectionStringメソッドで接続文字列を取得できます。

書式

(WebApplicationオブジェクト).Configuration.GetConnectionString("(appsettings.json ファイルの ConnectionStrings オブジェクト内のキー名)")
今回の場合は、ConnectionStrings 内に "DBConnectString" キー名で値を記述しましたので、以下の記述となります。
(WebApplicationオブジェクト).Configuration.GetConnectionString("DBConnectString")

コード

Program.cs
WebApplicationBuilder builder = WebApplication.CreateBuilder(args);
WebApplication app = builder.Build();

string constr = app.Configuration.GetConnectionString("DBConnectString")??"";

app.MapGet("/", () => "Connection String:"+constr);

app.Run();

実行結果

プロジェクトを実行します。下図のページが表示され、appsettings.json ファイルに記述した接続文字列がページに表示されます。 プログラムでappsettings.json ファイルに記述した接続文字列を読み取れている動作が確認できます。

データベース接続文字列の読み込み (Razor Pagesを利用する場合)

Razor Pagesを利用する場合は、WebApplicationオブジェクトに直接アクセスできないため、DI(Dependency Injection)を利用して、IConfigurationオブジェクトを取得します。

コード

以下のコードを記述します。
Index.cshtml
@page
@model DBConnectionStringUsingJson.Pages.IndexModel
@{
}
<html>
  <head>
  </head>
   <body>
     <p>接続文字列</p>
     <p>@Model.connectionStr</p>
   </body>
</html>
Index.cshtml.cs
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;

namespace DBConnectionStringUsingJson.Pages
{
  public class IndexModel : PageModel
  {
    private IConfiguration _conf;
    
    public string connectionStr;

    public IndexModel(IConfiguration conf)
    {
      _conf = conf;
    }

    public void OnGet()
    {
      connectionStr = _conf.GetConnectionString("DBConnectString") ?? "";
    }
  }
}
Program.cs
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddRazorPages();
var app = builder.Build();

app.UseStaticFiles();
app.UseRouting();
app.MapRazorPages();
app.Run();

解説

コンストラクタの下記コードがDIでIConfigurationオブジェクトを取得するコードです。 DIを利用すると、コンストラクタにパラメーターを記述すると、自動で適切なパラメーターが代入される仕組みです。 (詳しくはこちらの記事を参照してください。)
  private IConfiguration _conf;
    
  /* 中略 */

  public IndexModel(IConfiguration conf)
  {
    _conf = conf;
  }

OnGetメソッドで接続文字列を取得します。取得した文字列はconnectionStrメンバ変数に代入します。
    public void OnGet()
    {
      connectionStr = _conf.GetConnectionString("DBConnectString") ?? "";
    }

connectionStrメンバ変数の値をRazor Pageで表示します。
   <body>
     <p>接続文字列</p>
     <p>@Model.connectionStr</p>
   </body>

実行結果

プロジェクトを実行します。下図のページが表示されます。
appsettings.json ファイルに記述した接続文字列がページに表示されます。 プログラムでappsettings.json ファイルに記述した接続文字列を読み取れている動作が確認できます。

著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
最終更新日: 2023-05-07
作成日: 2023-05-07
iPentec all rights reserverd.