何时创建会话?

Sha*_*ica 1 c# asp.net session

在我的登录网页上(即用户点击的第一页)我有这种形式的代码:

public class MyPage : System.Web.UI.Page {
  private MyClass _obj = new MyClass();
  ...
Run Code Online (Sandbox Code Playgroud)

MyClass 有构造函数:

public MyClass() {
  var sess = HttpContext.Current.Session; // no problem here
  sess["MyValue"] = 123; // throws null ref exception coz sess is null
}
Run Code Online (Sandbox Code Playgroud)

正如我所评论的那样,调用sess["MyValue"]抛出一个空引用异常,因为HttpContext尚未创建会话对象.

那么什么时候开始访问Session对象是安全的呢?我不想放弃内联声明/初始化_obj; 这对我来说非常方便!我有什么替代品?

Dav*_*emp 14

您应该能够在Page的OnInit活动中或之后访问会话,或者PreInit如果您感到困扰.在那之前,你正在与死亡一起切割.