##環境
VS2019
Blazor Server
##質問
Blazorでクッキーを扱うにはどうすればよいのでしょうか。
##調査した事
セッション、クッキーを操作する為にはHttpContextを使う必要があり、
MVC.Core以降ではHttpContextを使うにはControllerの中でないとHttpContextが使えなくなっているようです。
それはBlazorでも同様です。
なので、クッキー・セッションを操作したければ、BlazorにControllerを実装する必要があるのだと思いましたが、razorのコードビハインドにロジックを持たせられているなら、BlazorでのContollerの役割が分からず、実装する気になりません。
もし、BlazorでControllerを実装する意味があるのならば教えて頂きたいです。(ブログなどで散見されるので作成する意味はやはりあるのでしょうか。)
代わりに、以下のようなクッキーサービスクラスを作成したいと考えております。
※razorファイルのコードビハインドで動作することは確認済みです。クッキーの操作はアプリケーション全体で行う想定なので、サービスクラスを作成しようとしています。
C#
1public class CookieService 2{ 3 #region プロパティ 4 5 private readonly IJSRuntime _jsRuntime; 6 #endregion 7 8 #region コンストラクタ 9 public CookieService(IJSRuntime jsRuntime) 10 { 11 _jsRuntime = jsRuntime; 12 } 13 #endregion 14 15 public async Task WriteCookieAsync(string key, string value) 16 { 17 await _jsRuntime.InvokeVoidAsync("blazorExtensions.WriteCookie", key, value); 18 } 19 20 public async Task<string> ReadCookieAsync() 21 { 22 return await _jsRuntime.InvokeAsync<string>("blazorExtensions.ReadCookie"); 23 } 24}
ただし、このコードでも分からない点があります。
BlazorでJavaScriptを操作する為には、IJSRuntimeクラスをDIする必要があります。
このサービスクラスでrazorファイルと同様にInject属性を付けてもDIされず、nullのままとなっていました。
サービスで DI を使用するにも書いてありますが、コンストラクタインジェクションしか受け付けないようです。
であれば、上記の書き方でよいと考えたのですが、これを実行すると以下のような例外が出力されてしまいます。
どのようにすれば、Blazorでクッキーを扱う事ができるのでしょうか。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。