2015-12-06 5 views
2

Я столкнулся с Ссылка на объект не установлена ​​в экземпляр объекта Ошибка в моем классе MVC 4 класса ASP.NET, который получает мои текущие сведения о сеансе. Каждый раз, когда я просматриваю страницу, переменная выбрасывает NullReferenceException и не может понять, почему, поскольку она работала до совершенства без каких-либо проблем.HttpContext.Current.Session - NullReferenceException

namespace TracerCRM.Web 
{ 
    public class Settings 
    { 
     public static Settings Current 
     { 
      get 
      { 
       Settings s = HttpContext.Current.Session["Settings"] as Settings; 
       if (s == null) 
       { 
        s = new Settings(); 
        HttpContext.Current.Session["Settings"] = s; 
       } 

       return s; 
      } 
     } 
    } 
} 

Я попытался следующие вещи, с которыми я столкнулся во время моего исследования:

1: "HttpContext.Current.Session" vs Global.asax "this.Session"

2: Rare System.NullReferenceException show up for a HttpContext.Current.Session["courseNameAssociatedWithLoggedInUser"] that was previously populated?

3: The Session object is null in ASP.NET MVC 4 webapplication once deployed to IIS 7 (W 2008 R2)

4: Log a user off when ASP.NET MVC Session expires

5: Login Session lost sometimes when redirect to action in asp.net mvc 3

Ничего из вышеперечисленного не работало для меня.

+0

Когда вы говорите «потому что он работал ранее совершенным без каких-либо проблем», то «она работает» часть перед оборачивать вашу логику настройки в 'Настройки 'класс? –

+0

нет, мне пришлось приступить к работе над новой разработкой в ​​проекте DayPilot Calendar Control, и с тех пор я столкнулся с этой проблемой. – Hennie

+0

@ Хенни проверить мой ответ и сказать мне, если что-то неясно. – mybirthname

ответ

6
 public static Settings Current 
     { 
      get 
      { 
       if(HttpContext.Current.Session == null) 
       { 
        Settings s = new Settings(); 
        return s; 
       } 
       if (HttpContext.Current.Session["Settings"] == null) 
       { 
        Settings s = new Settings(); 
        HttpContext.Current.Session["Settings"] = s; 
        return s; 
       } 

       return (Settings)HttpContext.Current.Session["Settings"]; 
      } 
     } 

Вы обертывание Session["Settings"] в Настройка класса, когда она равна нулю. Если вы измените код, как это, он должен работать.

Научитесь использовать отладку в будущем, вы сможете быстро устранить ошибки, подобные этому!

+0

Используйте debug и посмотрите, что является нулевым в текущем случае. Это сеанс null? : D – mybirthname

+0

Да, сеанс равен – Hennie

+0

@ Хенни проверить его сейчас. – mybirthname

0

Добавить Global.asax.cs

using System.Web.SessionState; 

protected void Application_PostAuthorizeRequest() 
{ 
    System.Web.HttpContext.Current. 
     SetSessionStateBehavior(System.Web.SessionState.SessionStateBehavior.Required); 
} 
Смежные вопросы