访问Global.Application_Error中的SessionState

时间:2008-11-18 20:49:11

标签: asp.net session-state global-asax

在Global.asax的Application_Error方法中,我试图从会话状态中检索一个值。

只要我抛出异常,我就能访问会话状态。 EG:

thow new Exception("Test exception");

但是,如果它是未处理的异常,则在尝试访问会话状态时会出现以下错误:“在此上下文中,会话状态不可用。”。

为什么行为上的差异,是否有解决方法?

感谢。

2 个答案:

答案 0 :(得分:2)

我有时讨厌ASP.NET ......

因此使用以下方式生成错误:

Response.Redirect("thispagedoesnotexist.aspx", false); 

以上行将重定向到Application_Error,会话状态不可用

然而

throw new Exception("test");

以上行将重定向到具有会话状态AVAILABLE

的Application_Error

因此,不是在Application_Error中全部执行此操作,而是在一个位置,我将不得不使用try / catches来查找错误。然后从会话,日志和电子邮件错误详细信息中收集数据,最后重定向到友好的错误页面。很多额外的代码..

结论:Application_Error毫无价值。

答案 1 :(得分:0)

我认为您正在尝试通过HttpContext.Current.Session访问会话。我认为行为的不同之处在于,在unhanded异常处理程序中,请求已进入“故障安全”模式,页面生命周期(包括加载和处理会话)已经完成。

lifecycle上查看此页面以获取更多信息