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

2024-01-28

我正在尝试使用HttpContext.Session在我的 ASP.NET Core Blazor Server 应用程序中(如此处所述MS Doc https://learn.microsoft.com/en-us/aspnet/core/fundamentals/app-state?view=aspnetcore-3.1,我的意思是:在启动时全部正确设置)

这是我尝试设置值时的代码部分:

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

当此代码在 Razor 组件中调用时OnAfterRenderAsync the session.Set抛出以下异常:

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

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

Question

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

(仅供记录:浏览器的会话存储不跨选项卡,这是一个痛苦)


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

The docs https://learn.microsoft.com/en-us/aspnet/core/blazor/state-management?view=aspnetcore-3.1#where-to-persist-state提供有关如何维护 Blazor 应用程序中的状态的指导。对于与传统服务器端会话最接近的事情,您正在考虑使用浏览器的sessionStorage.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Blazor 服务器应用程序中的 HttpContext.Session 的相关文章

  • 将 ASP.Net Identity 表链接到用户详细信息表

    我正在尝试将我的身份用户表链接到我创建的用于跟踪其他用户信息的用户详细信息表 该用户详细信息表称为 UserProfile 我发现了这个链接 但它在 NET Core 2 1 中不起作用 将 ASP NET Identity 用户链接到用户
  • ASP.NET core 获取 URL 绑定

    ASP NET core webhost 启动后 我想获取它的绑定 URL 即 http 0 0 0 0 5001 http 0 0 0 0 5001 https 192 168 42 42 8081 https 192 168 42 42
  • ASP.Net Core 中没有智能感知

    通过 Visual Studio 安装 ASP Net Core gt 新项目 gt Web gt ASP Net Web 应用程序 gt 确定 gt ASP Net 5 模板 安装后重新启动系统 然后创建一个新项目ASP NET 5 Te
  • 登录成功后身份服务器不重定向

    我正在尝试使用 MVC 客户端设置 IdentityServer4 一切工作正常 直到我想添加 ASP 身份 当我添加代码来使用 SQL Server 和 Identity 时 成功登录后 Identity 服务器不会将我重定向回客户端 而
  • 如何处理.net MVC Core中的动态错误页面?

    目前我有 app UseExceptionHandler Home Error 我想让路径相对于原始路径 例如如果 Tenant1 PageThatThrowsError 然后 app UseExceptionHandler Tenant1
  • ASP.NET Core [要求] 不可为 null 的类型

    Here https stackoverflow com questions 6662976 required attribute for an integer value 提出了如何验证不可为空的必需类型的问题 在我的情况下 提供的使字段
  • “TransformAppSettings”任务意外失败

    我有一个 NET Core 3 Blazor 服务器端 应用程序 我最近从预览版 5 版本升级到了 NET Core 3 0 1 预览版 6 版本 当我在本地构建并运行它时 它工作正常 但是当尝试将其发布到文件系统文件夹 在框架相关模式下
  • 如何在 Entity Framework Core 中调用标量函数

    下列的本文 http anthonygiretti com 2018 01 11 entity framework core 2 scalar function mapping 我试图使用 Entity Framework Core 将内部
  • 是否保证 HttpSessionListener.sessionCreated() 在任何其他线程访问新会话之前完成?

    我正在尝试将值缓存在ConcurrentHashMap in the Session 为了避免竞争条件并确保在任何线程尝试使用我的地图之前创建它 我使用HttpSessionListener sessionCreated 将地图添加到Ses
  • Blazor 服务器端 - AWS 环境中频繁出现 504 错误

    通过 AWS Elastic Beanstalk 将 blazor 服务器端项目部署到 Amazon Web Services 环境后 该网站经常断开连接 我不明白 测试时这些断开连接不会在本地发生 Errors 2020 04 30T16
  • 无法从 docker 容器打开 URL

    我在从 Docker 容器导航到 Google 身份验证页面时遇到问题 该应用程序是使用 asp net Core 2 0 制作的 其目的是显示从 Google Calendar API 检索的即将发生的事件 并在需要时创建事件 当应用程序
  • 运行添加迁移时无法加载程序集 Microsoft.EntityFrameworkCore.Design

    我使用以下 csproj 创建了一个类库项目
  • .net core 2.2 & Angular 7:文件上传控制器中的 IFormFile 始终为 null

    当查看其他答案和一些谷歌时 一切似乎都很好 但我的控制器从未收到任何数据 api uris等正确 请求到达正确的控制器 角度片段 component html 我的输入字段 div class input group div
  • Razor 模板中的特殊字符未正确编码

    我用 ASP NET Core MVC 做了一些测试 我试图表现出像 这样的特殊字符 但显示为 示例 创建新视图并放置 div div 默认情况下 cshtml文件以 UTF 16 编码 HTTP 响应标头中的字符集是 UTF 8 在 la
  • 将 List 保存到 ASP.NET 中的会话

    购物车项目保存在 SQL 数据库中 我想将所有 CartItems 放在一个 List 中并转移到 Instance Items The Instance变量正在保存到会话中 代码如下 public class ShoppingCart p
  • 将 cookie 设置为在会话结束时过期? ASP.NET

    我很惊讶我找不到任何答案 如何将 cookie 中的 sessionid 设置为在会话结束时过期 当浏览器关闭或用户一段时间不活动时 我发现的两个解决方案是 httpcookie Expires HttpContext Current Se
  • SoapCore Asp.net core 3.1 标头

    知道如何使用 SoapCore 为我的调用添加标头吗 到目前为止我所拥有的 在startup cs中 app UseSoapEndpoint
  • Rails:跟踪用户的 ID

    在我的 Rails 应用程序中 我有一个登录页面 该人登录后 我的应用程序继续跟踪已登录人员的最佳方式是什么 例如 如果用户移动到不同的页面 我的控制器 操作将失去对该用户的跟踪 除非我继续传递用户随后访问的每个页面之间的变量 有更好的方法
  • PHP 会话锁定并使用 Memcache 存储会话

    我有一个标准的 html 页面 其中有一些 img 标签 每个标签都指向我们服务器上的一个 php 文件 加载 php 文件时 它会在生成图像之前将一些数据保存到会话中 来自每个脚本的会话中的数据随后将在我们的应用程序中的其他脚本中使用 生
  • 内存数据库不保存数据

    我有一个简单的网络应用程序 在客户端有 Angular 在服务器端有 ASP NET Core Web API 我使用内存数据库 services AddDbContext

随机推荐