前提条件
環境:VisualStudio2019 Ver16.11.5
アプリ種類:Blazor Serverアプリケーション
言語:C#
データベース:Azure SQL DataBase
データベース接続:Azure Keyvault
Visual StudioとKeyvaultの構成設定(接続済サービスの設定)は終わっています。
やりたいこと
Azure KeyVaultを経由して接続文字列を獲得したい。
わからないこと
①KeyVaultからの情報を得て用いる方法
Blazorプロジェクト
1@page "/keyvault" 2 3<h1>@keyvault</h1> 4//変数keyvaultを画面に表示 5 6@code { 7 private int keyvault = ""; ←ここにKeyvaultから得た接続情報を格納したい 8}
上記コードのようにkeyvaultから接続情報を獲得し、変数に格納する方法が知りたいです。
他サイトの真似事をしてみましたが、コードに波線が出て動作しませんでした。
②program.csに付け加えるべき内容を知りたい
色々な動画やサイトを見ましたが人それぞれ追加する内容や箇所が異なっており余計に混乱してしまいました。しまいには接続済みサービスの設定だけで良いと書かれているものもあり、追加する情報は必須なのか、任意なのかを教えていただけないでしょうか。
私の場合のprogram.csは以下です。
Program.cs
1using Microsoft.AspNetCore.Hosting; 2using Microsoft.Extensions.Configuration; 3using Microsoft.Extensions.Hosting; 4using Microsoft.Extensions.Logging; 5using System; 6using System.Collections.Generic; 7using System.Linq; 8using System.Threading.Tasks; 9using Azure.Identity; 10 11namespace WebApplication1 12{ 13 public class Program 14 { 15 public static void Main(string[] args) 16 { 17 CreateHostBuilder(args).Build().Run(); 18 } 19 20 public static IHostBuilder CreateHostBuilder(string[] args) => 21 Host.CreateDefaultBuilder(args) 22.ConfigureAppConfiguration((context, config) => 23{ 24 var keyVaultEndpoint = new Uri(Environment.GetEnvironmentVariable("VaultUri")); 25 config.AddAzureKeyVault(keyVaultEndpoint, new DefaultAzureCredential()); 26}) 27 .ConfigureWebHostDefaults(webBuilder => 28 { 29 webBuilder.UseStartup<Startup>(); 30 }); 31 } 32}
接続先のkeyVaultのURLが環境変数として"VaultUri"に設定されているので、変数keyVaultEndpointに欲しい情報があるような気がするのですが、どうなのでしょうか?
※実際にウォッチで中身を見てみましたが中身は見れませんでした。
→(現在のコンテキストにkeyVaultEndpointは存在しません)
参考にしたサイト
https://news.mynavi.jp/techplus/article/zeroazure-23/
[3]プログラムの修正(Webアプリケーション起動用ファイル)
の箇所からわけがわからなくなってしまいました。
プロジェクト種類が違うので、program.csの中身も異なっておりどう書き換えていいかわからない状態です。
https://youtu.be/S7EPrlpPqXw
こちらの動画ではKeyVaultを用いて情報を取得する際にConfigrationManagerというものを使っているようですが、自分のプロジェクトにはそれがありませんでした。
追記:.NET5.0ではConfigrationManagerは使えないといった記事を見つけました。
とりあえず試したこと
program.csに以下のクラスを追加して、他の箇所から呼び出そうとしてみた。
program.cs
1 public class KeyVaultTest 2 { 3 public static void main(string[] args) 4 { 5 var key = new Uri(Environment.GetEnvironmentVariable("VaultUri")); 6 } 7 }
testプログラム
1<h1>@testkey</h1> 2//変数keyvaultを画面に表示 3 4@code { 5 public void Connect1() 6 { 7 var testkey = WebApplication1.KeyVaultTest.main.key; 8 } 9}
実行結果 エラー
「.KeyVaultTest.mainはメソッドです。これは特定のコンテンツでは無効になります。」
素人質問で色々とおかしなところがあると思いますが、ご教授いただけますと幸いです。
追加情報等必要でしたらなんなりとお申しつけください、よろしくお願いいたします。
あなたの回答
tips
プレビュー