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 : 53
Users Yesterday : 65
Users Last 7 days : 340
Users Last 30 days : 1390
Users This Month : 1341
Users This Year : 1341
Total Users : 95856
Views Today : 59
Views Yesterday : 76
Views Last 7 days : 418
Views Last 30 days : 1596
Views This Month : 1544
Views This Year : 1544
Total views : 133990
Who's Online : 0
ProtectedSessionStorage はusingしている通りでBrowserStorageのセッションストレージなので、セッションとは何も関係ないと思います。
https://learn.microsoft.com/ja-jp/aspnet/core/blazor/state-management?view=aspnetcore-8.0&pivots=server