Blazor Server におけるSessionクラスへの書き込みエラー

高鍋 敬太 0 Reputation points
2023-02-07T05:26:41.03+00:00

HttpContextから取得したSessionクラスへの書き込みに際しエラーが発生しております。

コードは以下となります。

        public void SetSessionInfo(string key, object value)
        {
            HttpContext httpContext = _httpContextAccessor.HttpContext;
            ISession session = httpContext.Session;

            // 格納するデータをJSON文字列にシリアライズして取得
            string jsonValue = JsonSerializer.Serialize(value);

            // セッションに指定されたキーでJSON文字列を格納
            session.SetString(key, jsonValue);
        }

このsession.SetStringの部分で、以下のエラーが発生し、書込みに失敗しております。

(一部マスキング)

System.InvalidOperationException
  HResult=0x80131509
  Message=The session cannot be established after the response has started.
  Source=Microsoft.AspNetCore.Session
  スタック トレース:
   場所 Microsoft.AspNetCore.Session.DistributedSession.Set(String key, Byte[] value)
   場所 Microsoft.AspNetCore.Http.SessionExtensions.SetString(ISession session, String key, String value)
   場所 ○○○○.Data.SessionControl.SetSessionInfo(String key, Object value) (C:\visualstudiopj\source\○○○○\○○○○\Data\SessionControl.cs):行 ○○
   場所 ○○○○.Pages.SessionID.<SetSessionInfo>d__14.MoveNext() (C:\visualstudiopj\source\○○○○\○○○○\Pages\SessionID.razor):行 ○○

  この例外は、最初にこの呼び出し履歴 
    [外部コード]
    ○○○○.Data.SessionControl.SetSessionInfo(string, object) (SessionControl.cs 内)
    ○○○○.Pages.SessionID.SetSessionInfo() (SessionID.razor 内) でスローされました

エラー内容から察するに、httpcontextのレスポンスがすでに始まっている?というような内容のようなのですが、

対処法がわからず苦慮しております。

こちらのエラーの発生原因と、その対処法についてご教示いただけますでしょうか?

なお、フレームワークはBlazorServerを利用しており、当エラーについては、複数の開発者間で挙動が異なります。

書込みに成功する人とエラーが出る人とに分かれておりますが、ソースコードや、ブラウザの設定等は、

現状差異は見当たらない状況です。

ご確認の程よろしくお願い致します。

ASP.NET Core
ASP.NET Core
A set of technologies in the .NET Framework for building web applications and XML web services.
4,773 questions
Blazor
Blazor
A free and open-source web framework that enables developers to create web apps using C# and HTML being developed by Microsoft.
1,663 questions
ASP.NET
ASP.NET
A set of technologies in the .NET Framework for building web applications and XML web services.
3,592 questions
{count} votes

Your answer

Answers can be marked as Accepted Answers by the question author, which helps users to know the answer solved the author's problem.