在Global.asax的Application_Error方法中,我试图从会话状态中检索一个值。
只要我抛出异常,我就能访问会话状态。 EG:
thow new Exception("Test exception");
但是,如果它是未处理的异常,则在尝试访问会话状态时会出现以下错误:“在此上下文中,会话状态不可用。”。
为什么行为上的差异,是否有解决方法?
感谢。
答案 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上查看此页面以获取更多信息