gpt4 book ai didi

asp.net-mvc - ASP.NET MVC session 使用

转载 作者:行者123 更新时间:2023-12-02 07:53:19 25 4
gpt4 key购买 nike

目前我在我的 ASP.NET MVC 应用程序中使用 ViewData 或 TempData 来实现对象持久化。

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

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

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

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

最佳答案

只是想分享一下我是如何在我的应用程序中使用 session 的。我真的很喜欢这个使用 session 的实现 ( Suggestions for Accessing ASP.NET MVC Session[] Data in Controllers and Extension Methods? ),因为它可以很容易地将 session 换出另一个商店或用于测试目的。

看着实现,它让我想起了我在其他项目中使用的 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);
}

以及我的 session 存储实现:

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();
}
}

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

   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;
}
}

我对这种方法很满意。

关于asp.net-mvc - ASP.NET MVC session 使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2417197/

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