Blazor服务器应用程序中的HttpContext.Session。

问题描述 投票:0回答:1

我正在尝试使用 HttpContext.Session 在我的ASP.NET Core Blazor服务器应用程序中(如本篇所述 MS Doc,我的意思是:在启动时全部正确设置)

下面是我试图设置一个值时的代码部分。

var session = _contextAccessor.HttpContext?.Session;
if (session != null && session.IsAvailable)
{
    session.Set(key, data);
    await session.CommitAsync();
}

当这段代码调用Razor组件的 OnAfterRenderAsyncsession.Set 抛出以下异常。

响应开始后,会话无法建立。

我(可能)理解了这个消息,但这使得Session基础架构无法使用:应用程序需要访问 其状态 在执行的每个阶段...

疑问

我是否应该完全忘记 DistributedSession ......还是有一个变通的办法,仍然利用了 HttpContext.Session? 我不希望为了低级别的实现而放弃分布式会话信息......

(只是为了记录在案,Browser的会话存储不是跨标签的,这很麻烦) 浏览器的会话存储不是跨标签的,这很麻烦。)

asp.net-core session httpcontext blazor-server-side
1个回答
4
投票

Blazor与传统的服务器端会话的概念根本不兼容,尤其是在客户端或WebAssembly托管模式下,一开始就没有服务器端。不过即使在 "服务器端 "托管模式下,与服务器的通信也是通过websockets进行的。只有一个初始请求。服务器端的会话需要一个cookie,当会话建立后必须发送给客户端,这意味着 只是 点,你可以做的是在第一次加载。之后,没有进一步的请求,因此也就没有机会建立会话。

在这之后,就没有进一步的请求,也就没有机会建立会话了。文件 就如何在Blazor应用中维护状态提供了指导。对于最接近传统的服务器端会话,您正在寻找使用浏览器的 sessionStorage.

© www.soinside.com 2019 - 2024. All rights reserved.