gpt4 book ai didi

asp.net-core - Blazor 服务器应用程序中的 HttpContext.Session

转载 作者:行者123 更新时间:2023-12-04 02:36:41 28 4
gpt4 key购买 nike

我正在尝试使用 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 组件的 OnAfterRenderAsync 中调用时 session.Set抛出以下异常:

The session cannot be established after the response has started.



我(可能)理解该消息,但这使得 Session 基础设施非常不可用:应用程序需要访问 它的状态 在执行的每个阶段...

问题

我应该完全忘记 DistributedSession基础设施,并选择 Cookies 或浏览器 SessionStorage? ...或者这里是否有解决方法仍在使用 HttpContext.Session ?我不想只是为了较低级别的实现而放弃分布式 session 基础设施......

(仅供引用:浏览器的 session 存储不是跨选项卡,这很痛苦)

最佳答案

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

docs提供有关如何在 Blazor 应用程序中维护状态的指导。对于最接近传统服务器端 session 的内容,您正在考虑使用浏览器的 sessionStorage .

关于asp.net-core - Blazor 服务器应用程序中的 HttpContext.Session,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61505915/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com