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

Unb*_*ble 6 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"];
Run Code Online (Sandbox Code Playgroud)

我从SO尝试了很多解决方案

尝试

if (!string.IsNullOrEmpty(Session["TenantSessionId"] as string))
 {
                //The code
 }
Run Code Online (Sandbox Code Playgroud)

请指导我.

错误:NULL引用

Ahm*_*med 12

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


Chr*_*att 7

NullReferenceException 来自尝试强制转换 null 值。一般来说,您通常最好使用as而不是直接转换:

var tenantSessionId = Session["TenantSessionId"] as int?;
Run Code Online (Sandbox Code Playgroud)

那永远不会引发异常。如果未设置会话变量,则 的值tenantSessionId将仅为 null。如果您有默认值,则可以使用空合并运算符来确保始终存在某个值:

var tenantSessionId = Session["TenantSessionId"] as int? ?? defaultValue;
Run Code Online (Sandbox Code Playgroud)

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

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

if (Session["TenantSessionId"] != null)
{
    // do something with session variable
}
Run Code Online (Sandbox Code Playgroud)

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


Rah*_*awe 6

[]作为一个索引(如在类中的方法),并在这种情况下,sessionnull你不能在其上执行索引。

尝试这个..

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