ASP.NET Coreを使っていて、接続文字列の扱いがよくわからなかったので調べてみました。
背景
- ASP.NET Core でWeb APIを作りたい
- Azure SQL Databseにつなぎたいので接続文字列が必要
- 開発はローカルで行い、本番はAzureのApp Serviceへデプロイしたい
- 接続文字列は
- ソースコードに書きたくない
- ローカルと App Serviceへのデプロイ後で別のものを使いたい
調べた結果
接続文字列を取得するコードは、例えば以下のようになります。
using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Configuration; namespace WebApplication1.Controllers { [Route("api/test")] [ApiController] public class TestController : ControllerBase { private IConfiguration _configuration; public TestController(IConfiguration configuration) { _configuration = configuration; } [HttpGet] public string Get() { //「test」という名前の接続文字列がsに入る var s = _configuration.GetConnectionString("test"); return s; } } }
では、接続文字列はどこに記載すればいいのでしょうか。
ローカルの場合
プロジェクト内にあるappsettings.json
に以下のように記述すると「これはローカルです」という文字列が取得できます。
{ "ConnectionStrings": { "test": "これはローカルです" } }
また、もう一つの方法としてsecrets.json
を使う方法があります。
Visual Studio 2019であれば、プロジェクトを右クリックして「ユーザーシークレットの管理」をクリックすると開くことができます。
使い方はappsettings.json
と同じです。 このファイルはプロジェクトとは別の場所(C:\Users\[username]\AppData\Roaming\Microsoft\UserSecrets\[id]\secrets.json
)にあります。
secret.json
の方がソースコードに含まれないので安心して使えると思います。
App Service(Web Apps)の場合
「構成」を開き、画面下の「接続文字列」という場所があります。「新しい接続文字列」から名前と値を登録しましょう。
こうすると、AppService側でローカルとは異なる接続文字列を設定することができます。
以上により、ローカル環境とAppService環境で接続文字列を使い分けることができます。
参考
Azure Web Apps の環境変数の管理の基本 ( Key Vault と User Secrets ) - BEACHSIDE BLOG