为了账号安全,请及时绑定邮箱和手机立即绑定

如果当前的ASP.NET会话为空,我该怎么办?

如果当前的ASP.NET会话为空,我该怎么办?

慕的地6264312 2019-07-26 17:04:17
如果当前的ASP.NET会话为空,我该怎么办?在我的Web应用程序中,我执行类似这样的操作来读取会话变量:if (HttpContext.Current.Session != null &&  HttpContext.Current.Session["MyVariable"] != null){     string myVariable= (string)HttpContext.Current.Session["MyVariable"];}我理解为什么重要的是检查为什么HttpContext.Current.Session [“MyVariable”]为空(该变量可能尚未存储在会话中,或者会因各种原因重置了会话),但为什么我需要检查如果HttpContext.Current.Session是null?我的理解是,会话是由ASP.NET自动创建的,因此HttpContext.Current.Session永远不应为null。这个假设是否正确?如果它可以为null,是否意味着我还应该在存储内容之前检查它:if (HttpContext.Current.Session != null){     HttpContext.Current.Session["MyVariable"]="Test";}else{     // What should be done in this case (if session is null)?     // Is it possible to force the session to be created if it doesn't exist?}
查看完整描述

3 回答

?
精慕HU

TA贡献1845条经验 获得超8个赞

以下陈述并不完全准确:

“所以如果你从你的页面调用其他功能,包括静态类,你应该没问题”

我正在调用一个静态方法,它通过HttpContext.Current.Session引用会话,它是null。但是,我通过使用jQuery的ajax通过webservice方法调用该方法。

正如我在此处发现的那样您可以使用方法的简单属性修复问题,或使用Web服务会话对象:

但是有一个技巧,为了在Web方法中访问会话状态,您必须启用会话状态管理,如下所示:

[WebMethod(EnableSession = true)]

通过指定EnableSession值,您现在可以使用托管会话。如果未指定此值,则将获得一个空的Session对象,并且在尝试访问会话对象时很可能会遇到空引用异常。

感谢Matthew Cozier的解决方案。

我以为我会加两分钱。


查看完整回答
反对 回复 2019-07-26
?
萧十郎

TA贡献1815条经验 获得超13个赞

如果您的Session实例为null并且您在'ashx'文件中,则只需实现'IRequiresSessionState'接口。

此接口没有任何成员,因此您只需在类声明(C#)后添加接口名称:

public class MyAshxClass : IHttpHandler, IRequiresSessionState


查看完整回答
反对 回复 2019-07-26
  • 3 回答
  • 0 关注
  • 487 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信