如何在asp.net mvc - 5中检查会话值是否为null或会话密钥是否存在

时间:2017-01-25 15:32:31

标签: c# asp.net asp.net-mvc asp.net-mvc-5

我有一个ASP.Net MVC - 5应用程序,我想在访问它之前检查会话值是否为null。但我无法这样做。

//Set
System.Web.HttpContext.Current.Session["TenantSessionId"] = user.SessionID;
// Access
int TenantSessionId = (int)System.Web.HttpContext.Current.Session["TenantSessionId"];

我从SO

尝试了很多解决方案

尝试

if (!string.IsNullOrEmpty(Session["TenantSessionId"] as string))
 {
                //The code
 }

请指导我。

错误:NULL参考

6 个答案:

答案 0 :(得分:8)

if(Session["TenantSessionId"] != null)
{
  // cast it and use it
  // The code
}

答案 1 :(得分:2)

由于 []充当Indexer(就像课堂上的方法一样),在这种情况下,sessionnull而你无法对其执行索引

试试这个..

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

答案 2 :(得分:1)

NullReferenceException来自于尝试转换空值。一般来说,使用as而不是直接投射通常会更好:

var tenantSessionId = Session["TenantSessionId"] as int?;

这永远不会引发异常。如果未设置会话变量,则tenantSessionId的值将为null。如果您有默认值,则可以使用null coalesce运算符来确保始终某些值:

var tenantSessionId = Session["TenantSessionId"] as int? ?? defaultValue;

然后,它将是会话中的值或默认值,即永远不为空。

您也可以直接检查会话变量是否为空:

if (Session["TenantSessionId"] != null)
{
    // do something with session variable
}

但是,您需要将所有工作与会话变量限制在此条件内。

答案 3 :(得分:0)

  

检查在C#MVC版本低于5的会话中是否为空。

if (!string.IsNullOrEmpty(Session["TenantSessionId"] as string))
{
    //cast it and use it
    //business logic
}
  

在5以上的C#MVC版本中,检查会话是否为空。

if(Session["TenantSessionId"] != null)
{
    //cast it and use it
    //business logic
}

答案 4 :(得分:0)

检查会话是否为空/空

if(!string.IsNullOrEmpty(Session [“ TenantSessionId”]作为字符串)) {

///在这里编写逻辑代码

}

答案 5 :(得分:0)

在某些情况下,您只想检查密钥本身是否存在,而不是内容。当您的会话键值也为空时,上述方法失败。

例如:

Session["myKey"] = null;
if(Session["myKey"]!=null){}

在上面的代码中,我想检查是否只有键(不是值)存在,我会得到错误。但密钥确实存在。

因此,我可以分离此存在性检查的唯一方法是基本上检查每个键。

static bool check_for_session_key(string SessionKey)
{
     foreach (var key in HttpContext.Current.Session.Keys)
     {
         if (key.ToString() == SessionKey) return true;
     }
     return false;
}
if(check_for_session_key("myKey")){} //checks for the key only

如果你知道更好的方法,请告诉我。