1

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

只要我抛出异常,我就可以访问会话状态。例如:

thow new Exception("Test exception");

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

为什么行为上的差异,有解决办法吗?

谢谢。

4

2 回答 2

2

我有时讨厌 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 毫无价值。

于 2008-11-19T18:59:23.437 回答
0

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

查看生命周期上的此页面以获取更多信息

于 2008-11-19T04:10:27.053 回答