Server.Transfer导致会话异常

use*_*845 17 c# asp.net session server.transfer

在我的全局中,我有以下代码来处理错误发生时

//[..] code goes here
  Server.Transfer("~/Error.aspx?ErrorID=" + errorId);
Run Code Online (Sandbox Code Playgroud)

它曾经是一个Response.Redirect完美的工作,除了它改变了网址(这就是为什么我要使用Server.Transfer)

不幸的是,现在当它尝试加载错误页面时,它在主页上尝试引用时会崩溃 Session

HttpException:
只有在配置文件或Page指令中将enableSessionState设置为true时,才能使用会话状态.还请确保System.Web.SessionStateModule或自定义会话状态模块包含在应用程序配置的\\部分中.

我的配置和页面都有enableSessionState.

我还发现了一些建议使用Context.RewritePath的链接 - 这只会导致为我加载空白页面.

使用Response.Redirect完美和按预期工作,所以我认为Server.Transfer是这里的问题.它是什么?

编辑代码:

protected void Application_Error(object sender, EventArgs e)
        {

            lock (_lockMe)
            {
                Exception ex = Server.GetLastError();

                if (ex != null)
                {
                    if (ex.InnerException != null)
                        ex = ex.InnerException;

                    ErrorLoggingManager.AddError(ex, new MembershipData(), ...); //etc
                }

                Server.ClearError();

                   //Some other database code for cleaning up some stuff when an error happens

                }

                try
                {
                    if (Response != null)
                    {
                        //Get the last error logged
                        MyDataContext db = new MyDataContext();
                        int errorId = db.LoggedErrors.OrderByDescending(le => le.ErrorId).Select(le => le.ErrorId).FirstOrDefault();

                        Server.Transfer("~/Error.aspx?ErrorID=" + errorId); 
                    }
                }
                catch (Exception)
                {
                }
            }
Run Code Online (Sandbox Code Playgroud)

Joe*_*Joe 0

为什么不在 web.config 中使用 customErrors 来进行重定向?

<customErrors mode="Off" defaultRedirect="~/Common/Error.aspx">
  <error statusCode="403" redirect="~/SM_AccessDenied.aspx" />
  <error statusCode="404" redirect="~/Common/FileNotFound.aspx" />
</customErrors>
Run Code Online (Sandbox Code Playgroud)