ASP.NET MVC 会话使用

2023-12-31

目前,我在 ASP.NET MVC 应用程序中使用 ViewData 或 TempData 进行对象持久化。

然而,在某些情况下,我通过基本控制器类将对象存储到 ViewData 中,每次请求时我都会访问数据库(当 ViewData["whatever"] == null 时)。

最好将这些持久化为具有更长生命周期的东西,即会话。同样,在订单处理管道中,我不希望像订单这样的内容在创建时保存到数据库中。我宁愿将对象填充到内存中,然后当订单达到某种状态时保存它。

那么会议似乎是最好的地方?或者您是否会建议在订单的情况下,在每个请求上从数据库中检索订单,而不是使用会话?

想法和建议表示赞赏。 谢谢 本


只是想分享我如何在应用程序中使用会话。我真的很喜欢这个实现(关于在控制器和扩展方法中访问 ASP.NET MVC Session[] 数据的建议? https://stackoverflow.com/questions/2213052/suggestions-for-accessing-asp-net-mvc-session-data-in-controllers-and-extension/2213232#2213232)使用会话,因为它可以轻松地将会话换成另一个商店或用于测试目的。

查看实现,它让我想起了我在其他项目中使用的 ObjectStore,将对象序列化为二进制或 xml 并存储在数据库或文件系统中。

因此,我简化了我的接口(以前 T 必须是一个类)并提出了以下内容:

public interface IObjectStore {
    void Delete(string key);
    T Get<T>(string key);
    void Store<T>(string key, T value);
    IList<T> GetList<T>(string key);
}

我的会话存储实现:

public class SessionStore : IObjectStore
{      
    public void Delete(string key) {
        HttpContext.Current.Session.Remove(key);
    }

    public T Get<T>(string key) {
        return (T)HttpContext.Current.Session[key];
    }

    public void Store<T>(string key, T value) {
        HttpContext.Current.Session[key] = value;
    }

    public IList<T> GetList<T>(string key) {
        throw new NotImplementedException();
    }
}

然后,我在基本控制器的构造函数中接收 IObjectStore,然后可以像这样使用它来向其他控制器公开属性:

   public string CurrentCustomer {
        get {
            string currentCustomer = 
                sessionStore.Get<string>(SessionKeys.CustomerSessionKey);
            if (currentCustomer == null) {
                currentCustomer = Guid.NewGuid().ToString();
                sessionStore.Store<string>(SessionKeys.CustomerSessionKey, currentCustomer);
            }
            return currentCustomer;               
        }
    }

我对这种方法非常满意。

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

ASP.NET MVC 会话使用 的相关文章

  • 我可以在 php 中的 SESSION 数组上使用 array_push 吗?

    我有一个想要在多个页面上使用的数组 因此我将其设为 SESSION 数组 我想添加一系列名称 然后在另一个页面上 我希望能够使用 foreach 循环来回显该数组中的所有名称 这是会议 SESSION names 我想使用 array pu
  • PartialView Action 正在调用自身

    我有 MVC 应用程序 它用于从主视图 ProductMaster 将 ProductAreaGrid 列表显示为 PartialView 并且它将在局部视图内将 CreateProductArea 作为 PartialView 我的 Gr
  • Web 文本编辑器中的 RTF 格式

    网络上是否有支持 RTF 格式文档输入的文本编辑器 我知道这对 webdev 来说有点奇怪 但我需要从数据库中读取 RTF 文档 并在基于 Web 的文本编辑器中对其进行编辑 然后将其存储回 RTF 中 在我在转换工具上投入太多资金之前 我
  • 测试 CodeIgniter 会话变量的正确方法是什么?

    获取以下代码片段 测试确保会话变量不为空的最佳方法是什么 如果稍后在我的脚本中 我调用以下内容 第一个打印正确 但在第二个我收到消息 未定义的变量 已登录 我尝试过使用 empty and isset 但两者均未成功 我还尝试使用向后执行
  • 从 ios 应用程序到 symfony2 Web 应用程序的登录和管理会话

    我使用 Symfony2 开发了一个 Web 应用程序 我用过FOS用户包用于用户管理和安全 现在 我正在考虑为我的网络开发一个本机 iOS 应用程序 但并不真正知道如何解决从应用程序创建会话的问题 并在整个交互用户应用程序中维护它 换句话
  • Azure git 部署 - 第二个程序集中缺少引用

    我正在尝试将 Bitbucket 部署设置到 Azure 网站 我成功链接了 Bitbucket 和 Azure 但是当我推送到 Bitbucket 时 我在 Azure 站点上收到以下错误 如果我单击 查看日志 它会显示以下编译错误 D
  • MVC Html.Partial 或 Html.Action

    我是 ASP NET MVC 新手 所以请耐心等待 我需要构建一个在多个视图中重复的菜单 什么可以更好地服务于目的Html Action http msdn microsoft com en us library ee703423 aspx
  • 如何在 MVC 3 中基于 XML 文件动态创建控件

    我有一个以 XML 格式存储在数据库中的 XML 文件 其中包含一些控件 例如下拉文本框 标签文本区域等 这些控件可能有也可能没有初始值 所以我的目标是读取 XML 文件 并根据控件类型 我需要动态创建该控件并关联初始值 如果有 并且页面的
  • mvc 4下拉默认值选择

    我想在下拉列表中选择默认值 其中policyId 7 但它没有选择该值 我做错了什么 控制器 var pm new ManagerClass IEnumerable
  • MVC 中的 Blazor:组件被渲染,但 @onclick 不起作用。连接问题

    我正在尝试在 net core 3 MVC 项目中使用 Blazor 我使用了一些教程来做到这一点 例如https fizzylogic nl 2019 08 18 integrating blazor in an existing asp
  • 具有多个 Angular 2 应用程序的 ASP.Net Core MVC [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在尝试为一个我知道会变得越来越复杂的项目准备结构 我想使用 ASP Net Core MVC 进行顶层导航 我想在每个主视图中放置
  • ASP.NET MVC 视图引擎解析顺序

    我创建了一个简单的 ASP NET MVC 1 0 版应用程序 我有一个 ProductController 它有一个操作索引 在视图中 我在Product子文件夹下创建了相应的Index aspx 然后我引用了 Spark dll 并在同
  • asp.net MVC 1.0和2.0货币模型绑定

    我想创建模型绑定功能 以便用户可以输入 等等 用于绑定到我的 ViewModel 的双精度值的货币值 我能够在 MVC 1 0 中通过创建自定义模型绑定器来执行此操作 但是自从升级到 MVC 2 0 后 此功能不再起作用 有谁有任何想法或更
  • 会话销毁后如何使 viewscoped beans/viewmap 生存(使用客户端保存)?

    我在用着Myfaces 2 2 具有客户端状态保存功能 我看到 ViewScoped beans 和存储在 viewmap 中的数据在用户会话销毁后丢失 我开始知道 不确定这是否正确 这是预期的行为 但是在会话销毁后避免查看过期异常的方法是
  • 在 ASP.NET MVC 中使用或继承 DisplayAttribute 创建自定义显示属性

    我想用DisplayAttribute with Name财产 问题是班级是sealed我无法继承它来覆盖某些方法 为什么我想要这个 我想传递一些代码以便将字符串转换为Name财产 并为语言添加一个属性 就像是 MyDisplay Code
  • 登录后,Codeigniter 会话数据在其他页面不可用

    因此 我设置了一个登录页面来验证用户的凭据 然后设置 codeigniter 会话数据 email 和 is logged in 以及其他一些项目 登录后第一页 数据即可访问 在该页面之后 我无法再访问会话数据 事实上 如果我尝试重新加载第
  • ASP.NET 视图中的区域?

    我正在使用 razor 引擎制作 ASP NET MVC 应用程序 我想知道是否可以使用Regions http msdn microsoft com en us library 9a1ybwek aspx在一个视图中 就像是 region
  • T4MVC Base 控制器没有默认构造函数

    我的控制器是从另一个没有默认构造函数的控制器继承的 T4MVC 生成以下构造函数 假设基本控制器具有默认构造函数 protected MyControllerController Dummy d 我该如何解决这个问题 有趣的是 根据this
  • 纠正我在 mvc 中的 url 路由

    在我的 global asax 文件中 我有一个注册路由 routes MapRoute Default Route name controller action id URL with parameters new controller
  • 实体框架 - 选择特定列并返回强类型而不丢失强制类型转换

    我正在尝试做类似的事情这个帖子 https stackoverflow com questions 1094931 linq to sql how to select specific columns and return strongly

随机推荐

  • 在锁定文件中找不到所需的信息。确保您的目标中提到了 .NETCore,Version=v5.0/win10-anycpu

    我正在开发 Windows 10 通用应用程序 目的是让 JS 前端连接到 C 库来完成繁重的工作 虽然当我添加引用和 trey 进行编译时 出现以下错误 在锁定文件中找不到所需的信息 确保你 您的目标中提到了 NETCore Versio
  • 尝试使用此语言级别不支持的资源

    我使用的是 IntelliJ IDEA Ultimate 2016 2 1 已将 Project SDK 设置为我的 1 8 版本 将项目语言级别设置为 8 将 Module SDK 设置为我的 1 8 版本 并将 JDK 主路径设置为 L
  • `pip install table` 失败并出现错误:: 找不到本地 HDF5 安装

    以下是我尝试在 Mac OSX 上安装 PyTables 时收到的详细错误消息 calvin pip install tables Downloading unpacking tables Downloading tables 2 4 0
  • 如何设置CKEditor 5高度

    使用CKeditor角度组件 如何设置编辑器高度 根据文档 可以通过将编辑器样式设置为 min height 500px important 但这不起作用 如果将其添加到全局样式表中 则以下内容应该有效 ck editor editable
  • 如何“安装”由 boost.python 制作的自定义 python 模块

    我做了一个 so带有 boost python 的模块 并且可以从本地文件夹导入它 my class so python code py 在 python code py 中 from my class import 显然如果我把pytho
  • Google 电子表格 - 如果有删除线则为行着色

    我有一个在线工作电子表格 其中随机单元格标记为删除线 到目前为止 Google 电子表格上还没有功能可以过滤或隔离这些标记为删除线的单元格 我遇到了谷歌功能isStrikethrough 但不确定是否可以在应用程序脚本上使用 我看到的结果是
  • 由placement-new创建的普通类型的生命周期从什么时候开始?

    在深入研究动态内存时 我发现琐碎类型如何开始其生命周期似乎是矛盾的 考虑片段 void p operator new sizeof int 1 2 new p int 3 什么时候int开始它的生命周期 只获取存储 operator new
  • 将值分配给 rowtype 的字段,其中“字段名称”是字符串

    我想为行类型的字段分配一个值 但我不知道该怎么做 假设我有一张桌子X在我的数据库中 还假设我有以下变量 a X ROWTYPE 代表表X的一行 b VARCHAR2 包含表 X 的列名 c VARCHAR2 包含我想要存储在 a b 中的内
  • 在字符串转换时获取枚举值

    我定义了以下枚举 from enum import Enum class D Enum x 1 y 2 print D x 现在打印的值为 D x 相反 我希望打印枚举的值 1 可以做什么来实现这个功能 您正在打印枚举object 使用 v
  • Objective-C 上缺少 Smalltalk 运行时功能?

    我不太了解 Smalltalk 但我了解一些 Objective C 我对 Smalltalk 很感兴趣 它们的语法有很大不同 但基本的运行时结构 即功能 非常相似 并且运行时功能由运行时支持 我认为两种语言在这个意义上非常相似 但是 Sm
  • 在 VBA 上计算 SHA512 (Excel 2003)

    我正在尝试在 VBA Excel 2003 上计算字符串的哈希值 但是当我调用ComputeHash 它给了我一个Invalid argument procedure call error DLL 参考 mscorlib v4 0 Syst
  • 如何在 Spring Boot 中从 application.properties 转换为 application.yml ?

    我有一个非常简单的 Spring Boot 应用程序 并且有 application properties 现在我想转移到 application yml 这是 application yml 文件 spring datasource ur
  • 创建自定义“自动增量”复合主键?

    我有一组父子表 一对多关系 我正在建表 对 PK 和自动增量的使用有一些疑问 父表有一个自动编号 PK 用于存储销售单标头 这里的一张记录是指票上的记录 子表用于存储票证详细信息 这里的一条记录是票证中的一项 例如可乐 火星棒等 我知道子表
  • 无法生成应用程序

    我有 rvm passenger ruby 1 9 3 nginx 但我现在收到此错误 无法生成应用程序 path to my app 无法从生成服务器读取 连接由对等方重置 104 I have passenger root设置为输出pa
  • 连接3个表以显示某些数据 PHP-MSSQL

    所以我有这个表 我想获取某些数据供用户查看并能够发布到其他页面 我无法发布图片 所以我必须将其分解 所以请耐心等待 第一桌 dbo 用户 pkey 用户ID 员工姓名 第二张桌子 dbo PC pkey PCID PC 号码 第三张桌子 d
  • 是否可以基于CSS创建一个带有渐变边框和透明内部的圆形?

    我正在尝试创建一个用 CSS 画圈有一个渐变边框但也是一个透明内胆这样它看起来像这样 如果内部不透明 有一些解决方案可以创建渐变边框 我的下面的代码片段就是基于这些解决方案 但它们原则上是通过在渐变上覆盖单色 div 来工作的 gt gt
  • 类 x 不存在默认构造函数(继承)C++

    我有以下三个标题 IBaseStates h class IBaseStates public enum STATE virtual void Update STATE state 0 玩家状态 h pragma once include
  • 更新 opencv 库后仍存在 Libpng 漏洞问题

    我在我的应用程序中使用以下依赖项 dependencies compile fileTree include jar dir libs compile project zxing 2 3 0 compile project ColorPic
  • 实施 MySQL NDB Cluster 有哪些限制?

    我想为 MySQL Cluster 6 实现 NDB Cluster 我想为至少有 200 万条记录的非常庞大的数据结构执行此操作 我想知道实施 NDB cluster 是否有任何限制 例如 RAM 大小 数据库数量或 NDB 集群的数据库
  • ASP.NET MVC 会话使用

    目前 我在 ASP NET MVC 应用程序中使用 ViewData 或 TempData 进行对象持久化 然而 在某些情况下 我通过基本控制器类将对象存储到 ViewData 中 每次请求时我都会访问数据库 当 ViewData what