C# 如何检查asp.net mvc-5中的会话值是否为null或会话密钥是否不存在
我有一个ASP.NETMVC-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
//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:我是初学者,所以我会犯一些愚蠢的错误。我是否也需要检查baresession
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