在ASP.Net中包装会话状态的首选方法是什么?

时间:2010-08-14 00:31:26

标签: c# asp.net session-state

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

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

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

  1. 会话对象上的扩展getter和setter
  2. 会话对象的扩展方法,用于返回具有getter和setter的类
  3. 第一个给出了语法:

    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
    

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

2 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:1)

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