【问题标题】:ASP.NET C# Application_Error in Global.asax cannot access Session variablesGlobal.asax 中的 ASP.NET C# Application_Error 无法访问会话变量
【发布时间】:2009-03-21 11:46:01
【问题描述】:

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

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";     
}   

非常感谢任何帮助。 谢谢!

【问题讨论】:

    标签: c# session global


    【解决方案1】:

    你所做的并没有错,尽管

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

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

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

    【讨论】:

    • 嗨 Harpo,感谢您的回复!目前,我们的错误日志记录逐页捕获错误并将它们吐回给用户(我知道这很愚蠢),但如果我们有跟踪,那么您会在跟踪中看到会话信息。必须有一种方法可以获取有关 application_error 事件的信息?
    • 同样,任何时候都可能触发错误,包括页面生命周期中在会话对页面可用之前的时间点。没有规定 session 不能为空。所以进行这项检查是合理的,确实是谨慎的。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-25
      • 2011-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-03
      相关资源
      最近更新 更多