在 Global.asax 的 Application_Error 方法中,我试图从会话状态中检索一个值。
只要我抛出异常,我就可以访问会话状态。例如:
thow new Exception("Test exception");
但是,如果它是未处理的异常,我在尝试访问会话状态时会收到以下错误:“会话状态在此上下文中不可用。”。
为什么行为上的差异,有解决办法吗?
谢谢。
在 Global.asax 的 Application_Error 方法中,我试图从会话状态中检索一个值。
只要我抛出异常,我就可以访问会话状态。例如:
thow new Exception("Test exception");
但是,如果它是未处理的异常,我在尝试访问会话状态时会收到以下错误:“会话状态在此上下文中不可用。”。
为什么行为上的差异,有解决办法吗?
谢谢。
我有时讨厌 ASP.NET...
因此使用以下方法生成错误:
Response.Redirect("thispagedoesnotexist.aspx", false);
上面的行将重定向到 Application_Error with session state not available
然而
throw new Exception("test");
上面的行将重定向到 Application_Error 会话状态 AVAILABLE
因此,与其在 Application_Error 中做这一切,我将不得不在我的代码中使用 try/catch 来捕获错误。然后从会话、日志和电子邮件错误详细信息中收集数据,最后重定向到友好的错误页面。很多额外的代码..
结论:Application_Error 毫无价值。
我认为您正在尝试通过 HttpContext.Current.Session 访问会话。我相信行为上的区别在于,在未处理的异常处理程序中,请求已进入“故障安全”模式,并且页面生命周期(包括加载和处理会话)已经完成。
查看生命周期上的此页面以获取更多信息