Global.asax中的ASP.NET C#Application_Error无法访问Session变量

我有我的error handling设置来跟踪所有exception,并将我们需要的信息写入数据库,并通过电子邮件发送出需要了解错误的开发人员以便修复它。 我遇到的问题是在页面完全加载之前发生错误。 在这种情况下,我要跟踪的会话变量在Application_Error中不可用。 因此,我执行以下操作以便在error handling中不会出现错误,但必须有更好的方法。 此外,如果页面加载并且在提交表单时发生错误,则会话变量可用。

try { user_name = System.Web.HttpContext.Current.Session["User_Name"].ToString(); user_number = System.Convert.ToInt32(System.Web.HttpContext.Current.Session["User_Number"].ToString()); } catch (Exception ex) { user_number = 0; user_name = "N/A"; } 

任何帮助是极大的赞赏。 谢谢!

尽管如此,你正在做的事情没有错

 if ( null != System.Web.HttpContext.Current.Session ) 

比你的try-catch块更“外科”。

在AcquireRequestState事件之前,会话未初始化,因此在此点之前发生的任何错误都不会有会话变量可用。

这是你需要做的。 用户可以通过书签或知道URL转到任何页面。 因此,在设置任何值之前,用户可能会检索页面。 因此,您需要做的是确保代码不会中断。