我有一个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参考
答案 0 :(得分:8)
if(Session["TenantSessionId"] != null)
{
// cast it and use it
// The code
}
答案 1 :(得分:2)
由于 []
充当Indexer
(就像课堂上的方法一样),在这种情况下,session
是null
而你无法对其执行索引。
试试这个..
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
如果你知道更好的方法,请告诉我。