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の仕組み上難しいのかな。






Users Today : 39
Users Yesterday : 44
Users Last 7 days : 182
Users Last 30 days : 963
Users This Month : 842
Users This Year : 15668
Total Users : 93472
Views Today : 50
Views Yesterday : 53
Views Last 7 days : 232
Views Last 30 days : 1223
Views This Month : 1050
Views This Year : 21255
Total views : 131190
Who's Online : 0
ProtectedSessionStorage はusingしている通りでBrowserStorageのセッションストレージなので、セッションとは何も関係ないと思います。
https://learn.microsoft.com/ja-jp/aspnet/core/blazor/state-management?view=aspnetcore-8.0&pivots=server