Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#无法检查会话是否存在?_C#_Asp.net Mvc_Session_Exists - Fatal编程技术网

C#无法检查会话是否存在?

C#无法检查会话是否存在?,c#,asp.net-mvc,session,exists,C#,Asp.net Mvc,Session,Exists,执行以下操作时,我会收到一个错误: if(Session["value"] != null) { // code } 我得到的错误是: 对象引用未设置为对象的实例 为什么会这样?我总是这样检查我的会话?我使用的是MVC框架,这和它有关系吗 编辑: 代码位于控制器的构造函数中: public class MyController : ControllerBase { private int mVar; public MyController() {

执行以下操作时,我会收到一个错误:

if(Session["value"] != null)
{
   // code
}
我得到的错误是:

对象引用未设置为对象的实例

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

编辑:

代码位于控制器的构造函数中:

public class MyController : ControllerBase
{
    private int mVar;

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

你必须这样做-

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

出现此错误是因为“会话”对象为空。因此,不可能看到它的[“值”]位。我不熟悉MVC,但可能存在一个更大的问题,即会话对象没有被创建,或者您在生命周期的错误点访问它,或者您只需要一个测试来检查会话!=null。

[]是一个索引器,它的行为类似于类上的方法

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

这样做:

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

会话只在操作处理期间存在——我不希望它在控制器的构造函数中有效。例如,控制器可能(据我所知)在请求之间重复使用

您需要在操作(方法)中执行此操作,或者(可能更合适)在操作筛选器中执行此操作,或者在
OnActionExecuting
(etc)方法中执行此操作:


您使用的语法:

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

}
。。。是在ASP.NET中检查会话对象的正确方法。我怀疑问题是因为您使用的是ASP.NET MVC

也许我们的一些MVC专家可以启发我们如何在ASP.NET MVC中正确执行此操作

编辑:我看到Marc Gravell在我打字时发布了他的答案。这应该是有照明的。

我用这种方法求解:

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

}
您还可以使用:

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

“System.Web.HttpContextBase”不包含“Current”的定义,并且找不到接受类型为“System.Web.HttpContextBase”的第一个参数的扩展方法“Current”(是否缺少using指令或程序集引用?),当我离开当前对象时,它可以工作。但我仍然得到了错误。我认为这与Partario所说的有关:会话对象本身是空的。现在,lat找到了原因:s…像这样做它将工作:System.Web.HttpContext.Current.Session[“Value”]Thnx。但是为什么我需要使用filterContext.RequestContext.HttpContext.Session[“val”]而不是Session[“val”]?我还需要调用base.OnActionExecuting(filterContext);?好的:)你能简单地告诉我filterContext是关于什么的吗?这就是它将附加状态(通常在成员中不直接可用)传递给筛选器方法的方式。IIRC,在ASP.NETMVC的实际操作(Manning)中有更多的提到。。。如前所述,ASP.NET MVC正在运行。不过,还有其他问题。@MarcGravel我发现您检查会话值的方式存在潜在问题。您应该将其设置为“var myvar=Session[“value”];”,然后检查它是否为null并将其回滚。在检查和强制执行会话之间,会话可能会变得无效。-我想您应该知道:)您不需要
var myvar=Session[“value”];如果(myvar!=null)作为
if(会话[“value”]!=null)
可以正常工作。我也不担心两次获得
Session[“value”]
(一次用于!=null,一次用于设置变量),因为优化器应该处理这个问题。注意:您可能会发现有用的:
mVar=(int)Session[“value”]??0;。这不会解决此线程所涉及的空会话问题(因为它不是检查会话,而是检查会话中的值)。如果(会话!=null 0&&Session[“mySessionVariable”]!=null)
工作得更好?-1如果您的会话实际上为空,这将抛出一个错误。谢谢。这很有道理。今天学到了一点东西!
if(Session != null && Session["name"] != null && Session["name"].ToString()!="")
{
   //fire code
}
if (Session == null || String.IsNullOrEmpty((string)Session["session_object"])){
   // Do something
}