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

C# 如何检查asp.net mvc-5中的会话值是否为null或会话密钥是否不存在,c#,asp.net,asp.net-mvc,asp.net-mvc-5,C#,Asp.net,Asp.net Mvc,Asp.net Mvc 5,我有一个ASP.NETMVC-5应用程序,我想在访问它之前检查会话值是否为null。但我不能这样做 //Set System.Web.HttpContext.Current.Session["TenantSessionId"] = user.SessionID; // Access int TenantSessionId = (int)System.Web.HttpContext.Current.Session["TenantSessionId"]; 我尝试了许多解决方案,从这么多 企图 if

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

//Set
System.Web.HttpContext.Current.Session["TenantSessionId"] = user.SessionID;
// Access
int TenantSessionId = (int)System.Web.HttpContext.Current.Session["TenantSessionId"];
我尝试了许多解决方案,从这么多

企图

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


错误:空引用

[]
充当索引器(类似于类上的方法),在这种情况下,
会话
,您无法对其执行索引

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

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

NullReferenceException来自尝试强制转换空值。通常,您最好使用
作为
而不是直接演员:

var tenantSessionId = Session["TenantSessionId"] as int?;
这永远不会引起例外。如果未设置会话变量,
tenantSessionId
的值将仅为null。如果您有一个默认值,则可以使用null coalesce运算符来确保始终存在一些值:

然后,它将是会话中的值或默认值,即从不为null

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

if (Session["TenantSessionId"] != null)
{
    // do something with session variable
}
但是,您需要将会话变量的所有工作限制在该条件内


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


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


检查会话是否为空/空

如果(!string.IsNullOrEmpty(会话[“租户会话ID”]作为字符串)) {

//这里为逻辑编写代码


}

在这种情况下,您只需要检查密钥本身是否存在,而不需要检查内容。当会话键值也为null时,上述方法将失败

例如:

在上面的代码中,我想检查是否只有键(不是值)存在,我将得到false。但关键确实存在

所以我唯一能分开这个存在性检查的方法,就是基本上检查每个键

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

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

请尝试
if(Session[“TenantSessionId”]==null)
=@Roma:谢谢。你太棒了!在尝试编程之前,您可能想学习如何编程?有一些好书你可以读,它们会对你有很大帮助。@will:我想一起编码和学习。我想做更多的练习。仍然感谢您的输入。@Will:我是初学者,所以我会犯一些愚蠢的错误。我是否也需要检查bare
session
null。请引导我。我不认为检查此
会话[“租户会话ID]”有用空值
适用于我。我是否也需要检查裸
会话
?是的,正如我提到的
[]
这将充当
索引器
,等等,有时,当
会话
变量中的值为空时,它可能会抛出
空引用
的错误。我使用
作为
,但我遇到了一些错误,一个著名的家伙在《Steve Muecke》中告诉我最好做经典的类型转换。因为integer不是引用类型以及所有这些。附言:我没有使用“int?”我只是在endLINK中使用了
int
。是的,你不能将
用作不可空的
,因为它返回
null
,而不是在无法转换值时引发异常。但是,如果合并为null,您仍然可以将其存储在不可为null的存储库中。请在答案中添加一些信息,而不仅仅是代码。
if (!string.IsNullOrEmpty(Session["TenantSessionId"] as string))
{
    //cast it and use it
    //business logic
}
if(Session["TenantSessionId"] != null)
{
    //cast it and use it
    //business logic
}
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