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
}