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)
为什么不在 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)