asp.net blazor server sideでセッション変数を使おうとして、チョット嵌ったので、メモ。
asp.net webappなどでは、Program.cs中でServiceにSessionを追加して、UseSessionメソッドを呼び出し、プログラム中からは、HttpContext.Sessionを介して、セッション変数を扱えるが、blazor server sideの場合、HttpContextにアクセスできないようなので、どうすればよいのか調べてみると、以下のような感じでセッション変数を保存,参照,削除できるようだ。
@using Microsoft.AspNetCore.Components.Server.ProtectedBrowserStorage
@inject ProtectedSessionStorage Session
・・・
// セッション変数操作(キーは当然string)
// セッション変数へ値を保存(このメソッドのValueはobject型)
await Session.SetAsync(Key,Value);
// セッション変数から値を取得
// valの型はProtectedBrowserStorageResult<T>となる
var val = await Session.GetAsync<T>(Key);
if (!val.Success) {
// 取得失敗
}
T? v = val.Value;
// セッション変数を削除
await Session.DeleteAsync(Key);
ただ、このメソッド群はJavascriptを使用しているようで、OnInitializedAsync内で呼び出すと、例外が発生する。
初期化時にセッション変数の値を得たい場合は、OnAfterRenderAsync中に記述する必要がある。
普通にHttpContextが取れればいいのに・・・まぁ、Blazorの仕組み上難しいのかな。
ProtectedSessionStorage はusingしている通りでBrowserStorageのセッションストレージなので、セッションとは何も関係ないと思います。
https://learn.microsoft.com/ja-jp/aspnet/core/blazor/state-management?view=aspnetcore-8.0&pivots=server