HttpContext.Current.Session在服务器中抛出Object引用错误而不是在本地

时间:2015-12-10 18:40:04

标签: c# asp.net-mvc-4 session

在Authorizaiton类中,我将用户对象分配给会话

 HttpContext.Current.Session[Constants.SessionActiveUserInfo] = userInfo;

它在本地工作正常,但在服务器中它正在抛出

  

“对象引用未设置为对象的实例。”

当我使用controller / actionmethod名称命中url时,由于会话,它会抛出HTTP错误500(“对象引用未设置为对象的实例。”)。 然后,如果我再次点击网址,它工作正常。

为什么表现得像这样?有什么帮助吗?

1 个答案:

答案 0 :(得分:0)

我在模型视图控制器中遇到了一个问题,其中会话未被实例化。我相信您遇到的问题是,当您导航到该控制器时,会话实际上并不驻留在服务器上。

下面,我不是直接调用Session,而是调用SessionModify<Example>("Sample", example);如果它存在,将分配值,如果不是,它将添加Session。

我创建了一个类来帮助管理会话:

public static class Storage
{
     public static void SessionAdd<T>(string label, T value)
     {
          if(!string.IsNullOrEmpty(label))
               HttpContext.Current.Session.Add(label, value);
     }

     public static void SessionModify<T>(string label, T value)
     {
          if(HttpContext.Current.Session[label] != null)
          {
               HttpContext.Current.Session[label] = value;
               return;
          }

          SessionAdd(label, value);              
     }

     public static T SessionModifyAndReturn<T>(string label, T value) where T : class, new()
     {
          var content = new  T();
          if(HttpContext.Current.Session[label] != null)
               HttpContext.Current.Session[label] = value;
          else { SessionAdd(label, value); }

          content = value;
          return content;
     }           
}