用户代码未处理System.Web.HttpException

时间:2011-03-09 06:04:38

标签: c# asp.net

我一直在使用

protected void Application_Error(Object sender, EventArgs e)
{
    HttpException ex = Server.GetLastError() as HttpException;
    Exception ex_T = ex;
    Session["Ex"] = ex;
    Session["Ex_T"] = ex_T;
    Response.Redirect("~/errorPage.aspx" );
}

异常处理功能。

这时我登录应用程序“sometime”

发生异常,详细信息为

System.Web.HttpException was unhandled by user code
  Message="Session state is not available in this context."
  Source="System.Web"
  ErrorCode=-2147467259
  StackTrace:
       at System.Web.HttpApplication.get_Session()
       at Tools.Global.Application_Error(Object sender, EventArgs e) in C:\Myproject\Tools\Global.asax.cs:line 67
       at System.EventHandler.Invoke(Object sender, EventArgs e)
       at System.Web.HttpApplication.RaiseOnError()
  InnerException: 

我无法追踪原因

任何人都可以帮助我

提前致谢

2 个答案:

答案 0 :(得分:3)

我在这里可以看到2个问题。第一个是错误发生在会话之外或创建会话之前。从堆栈跟踪中可以看出,会话未初始化或已退出。无法启动会话,也不应在Application_Error中访问。

第二个问题是GetLastError可能返回一个不是HttpException的异常。在这种情况下,ex被赋值为null。 ex_t也从ex。

指定为null
Exception ex = Server.GetLastError();
if (ex != null)
{
    HttpException hex = ex;
    if (hex != null)
        Session["Ex"] = hex; // try to do something else instead of accessing session
}
Session["Ex_T"] = ex; // try to do something else instead of accessing session
Response.Redirect("~/errorPage.aspx" );

答案 1 :(得分:0)

在访问值之前,首先检查Session是否为空。

其次,GetLastError可能会返回不是HttpException的异常。首先尝试查看是否(ex是HttpException)然后将其分配给另一个HttpException变量。