スポンサーリンク

Blazor Server でセッション変数を使った実装

.NET CoreASP.NET CoreBlazor Server 5.0C#

Blazor Server でセッション変数を使った処理のサンプルを作ったので参考にしてほしい。
ソースコードはGitHubで公開しています。

ソースコード構成

Visual Studio プロジェクト の Blazor Server テンプレートに、SessionKey.cs、LoginInfo.cs、SessionVariable_Class.razor、SessionVariable_Number.razor、SessionVariable_String.razor を追加し、NavMenu.razor、Startup.cs、_Imports.razor を修正しています。

ソースコード変更内容を解説

SessionKey.cs

・セッション変数のキー名を纏めている一般的な定数クラス。

LoginInfo.cs

・ログインユーザの情報を扱う一般的なModelクラス。

_Imports.razor

・razorページ全体で使用する using のリストに、Microsoft.AspNetCore.Components.Server.ProtectedBrowserStorage を追加し、各razorページでセッション変数を扱えるようにしている。
・razorページ全体で定数クラス、データクラスを扱えるように、WebApplication1.Const、WebApplication1.Model も追加している。

Startup.cs

・services.AddSession(options => で、セッションに関係するクッキーを設定している。
 Nameでクッキー名を設定。
 IsEssentialでクッキーは必須と設定。
・app.UseSession() でセッション ミドルウェアを有効にしている。

SessionVariable_Number.razor

・「セッション変数で数値型の値を扱う場合」画面。
・Microsoft.AspNetCore.Components.Server.ProtectedBrowserStorageをusingすることで使えるようになる @inject ProtectedSessionStorageで、_ProtectedSessionStoreメンバ変数を宣言し、SetAsync()、GetAsync()、DeleteAsync()メソッドでセッション変数を操作している。
・GetAsync()はセッション変数の型をジェネリックで指定する必要がある。ここではintを指定している。
・ GetAsync() の戻り値はProtectedBrowserStorageResultで、セッション変数の取得に成功したかを ProtectedBrowserStorageResult.Successで確認し、成功していればセッション変数の値を ProtectedBrowserStorageResult.Value から取り出すことが出来る。

SessionVariable_String.razor

・「セッション変数で文字列型の値を扱う場合」画面。
・SessionVariable_Number.razor との違いは、GetAsync()でセッション変数の型にstringを指定しているのみ。

SessionVariable_Class.razor

・「セッション変数でクラス型の値を扱う場合」画面。
・ SessionVariable_Number.razor との違いは、 SetAsync()にLoginInfoユーザー定義クラスのインスタンスを渡し、GetAsync()でセッション変数の型に LoginInfoユーザー定義クラス を指定しているのみ。

NavMenu.razor

SessionVariable_Number.razor、SessionVariable_String.razor、SessionVariable_Class.razor 画面へのリンクを追加したのみ。

注意点

Blazor Server でセッション変数を使用する場合 WebSocketが必須

Visual Studio プロジェクト

今回使った Visual Studio プロジェクト テンプレートは、Blazor Server 5.0 の認証無し、HTTPS無しです。

コメント

タイトルとURLをコピーしました