Подтвердить что ты не робот

С# Не удается проверить сеанс?

Я получаю сообщение об ошибке, когда я делаю следующее:

if(Session["value"] != null)
{
   // code
}

Ошибка, которую я получаю, такова:

Ссылка на объект не установлена ​​в экземпляр объекта.

Почему это? Я всегда проверяю свою сессию таким образом? Я использую MVC Framework, это имеет к этому какое-то отношение?

EDIT:

Код находится в конструкторе контроллера:

public class MyController : ControllerBase
{
    private int mVar;

    public MyController()
    {
        if (Session["value"] != null)
        {
            mVar= (int)Session["value"];
        }
    }
}
4b9b3361

Ответ 1

Сессия действительно существует только во время обработки действия - я бы не ожидал, что она будет действительной в конструкторе контроллера. Например, контроллер может (для всех, кого я знаю) повторно использовать между запросами.

Вам нужно будет сделать это либо в действии (методе), либо (возможно, более подходящим образом) в фильтре действий или методе OnActionExecuting (и т.д.):

public abstract class ControllerBase : Controller
{
    protected override void OnActionExecuting(
        ActionExecutingContext filterContext)
    {
        // code involving this.Session // edited to simplify
        base.OnActionExecuting(filterContext); // re-added in edit
    }
}

Ответ 2

[] является индектером, он действует как метод класса.

В этом случае Session имеет значение null, и вы не можете выполнить индексацию на нем.

Сделайте это:

if(Session != null && Session["value"] != null)
{
   // code
}

Ответ 3

Вам нужно будет сделать это вот так:

if(null != HttpContext.Current.Session["Value"])
{
    //Code here.
}

Ответ 4

Вы получаете эту ошибку, потому что объект "Сессия" имеет значение null. Поэтому невозможно просмотреть бит [ "value" ]. Я не знаком с MVC, но есть ли еще большая проблема, при которой объект Session не создается, или вы обращаетесь к нему в неправильной точке жизненного цикла, или вам просто нужен тест, чтобы проверить, является ли Session!= нуль.

Ответ 5

Используемый вами синтаксис:

if (Session["mySessionVariable"] != null)
{

}

... это правильный способ проверки объекта Session в ASP.NET. Я подозреваю, что проблема в том, что вы используете ASP.NET MVC.

Возможно, некоторые из наших экспертов MVC могут просветить нас относительно правильного способа сделать это в ASP.NET MVC.

Изменить: Я вижу, что Марк Гравелл опубликовал свой ответ, пока я набираю это. Это должно быть иллюстративным.

Ответ 6

Я решаю таким образом:

if (Session.Count > 0 && Session["mySessionVariable"].ToString() != null)
{

}

Ответ 7

if(Session != null && Session["name"] != null && Session["name"].ToString()!="")
{
   //fire code
}

Ответ 8

Вы также можете использовать:

if (Session == null || String.IsNullOrEmpty((string)Session["session_object"])){
   // Do something
}