C#无法检查Session是否存在?

Mar*_*ijn 16 c# asp.net-mvc session exists

当我执行以下操作时出现错误:

if(Session["value"] != null)
{
   // code
}
Run Code Online (Sandbox Code Playgroud)

我得到的错误是这样的:

你调用的对象是空的.

为什么是这样?我总是这样检查我的会话?我正在使用MVC框架,这与它有关吗?

编辑:

代码位于Controller的构造函数中:

public class MyController : ControllerBase
{
    private int mVar;

    public MyController()
    {
        if (Session["value"] != null)
        {
            mVar= (int)Session["value"];
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Nic*_*ley 21

[]是一个索引器,它就像一个类的方法.

在这种情况下,Session为null,您无法对其执行索引.

做这个:

if(Session != null && Session["value"] != null)
{
   // code
}
Run Code Online (Sandbox Code Playgroud)


Mar*_*ell 18

会话在处理动作时才真正存在- 我不希望它在控制器的构造函数中有效.例如,控制器可能(据我所知)在请求之间重用.

您需要在动作(方法)中执行此操作,或者(可能更恰当地)在动作过滤器或OnActionExecuting(etc)方法中执行此操作:

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
    }
}
Run Code Online (Sandbox Code Playgroud)