【问题标题】:What's the preferred way to wrap session state in ASP.Net?在 ASP.Net 中包装会话状态的首选方法是什么?
【发布时间】:2010-08-14 08:37:44
【问题描述】:

我有一个使用会话状态的 ASP.Net 项目,我想对我们如何访问会话状态更严格一点,我对代码中浮动的所有字符串不满意。我还需要知道特定值何时在会话状态中存储/更新以跟踪该对象的最新值。

使用常量很容易解决字符串问题,但对跟踪没有帮助。将它们全部封装在一个类中很吸引人,但是我必须将会话对象传递给该类,这似乎有点混乱

我正在考虑使用以下两个选项之一:

  1. 会话对象上的扩展 getter 和 setter
  2. 会话对象的扩展方法,用于返回具有 getter 和 setter 的类

第一个给了我语法:

var thing = Session.GetThing();
Session.SetThing(thing);

第二个给出:

var thing = Session.Wrapper().Thing;
Session.Wrapper().Thing = thing;

两者都有其吸引力,尽管我倾向于第二个。在一个理想的世界里,我希望能够做到这一点:

var thing = Session.Thing(); // easy to do
Session.Thing() = thing; // don't think it's possible

处理此问题的首选方法是什么?这些中的任何一个,另一种方式,还是我做错了?

【问题讨论】:

    标签: c# asp.net session-state


    【解决方案1】:

    您不必将 Session 传递给每个班级,您可以:

    public class State
    {
        public string Something
        {
            get { return HttpContext.Current.Session["Something"] as string; }
            set { HttpContext.Current.Session["Something"] = value; }
        }
    }
    

    我相信,这是典型的方法。 HttpContext 具有静态可用的 Current 属性。

    【讨论】:

    • 谢谢,我想多了。我应该寻找如何从其他地方访问会话状态,而不是尝试扩展 HttpSessionState 对象。
    【解决方案2】:

    我首选的方法是将所有需要访问的变量放入一个对象中。然后我在页面的基类中放置一个变量,该变量提供对会话中对象的适当访问。真正执行此操作的唯一方法是提供一个标准,要求使用此对象,然后进行代码/同行评审,以确保杂项字符串/变量不会最终阻塞会话。

    【讨论】:

    • 不是我想要的,因为我有一些地方需要通过控件访问它,有时还需要通过 Web 服务访问
    • @baralong - 实际上我们的框架考虑了所有这些。从架构中的任何控件,您都可以通过我们专门为此目的的属性和方法访问会话对象。我想说这完全取决于你如何计划一切。
    猜你喜欢
    • 2014-07-20
    • 1970-01-01
    • 2010-09-28
    • 2017-07-16
    • 2018-12-01
    • 1970-01-01
    • 2014-05-28
    • 1970-01-01
    相关资源
    最近更新 更多