在我的全局代码中,当发生错误时,我需要处理以下代码
//[..] code goes here
Server.Transfer("~/Error.aspx?ErrorID=" + errorId);
它曾经是一个完美工作的Response.Redirect
,除了它改变了url (这就是为什么我想使用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)
{
}
}
发布于 2014-02-19 16:40:14
因为你没有发布太多的代码。所以没有看到你所做的实际实现。我可以向你推荐以下几点。
第一点。首先,你需要检查SessionState
是否是页面的enabled
。您可以在web.config
文件中全局设置它们。在web.config
中尝试下面给出的snippet
<configuration>
<system.web>
<pages enableSessionState="true" />
</system.web>
</configuration>
点2.并把你的Redirection
in Application_Error
in Global.asax
。
public void Application_Error(object sender, EventArgs e)
{
HttpApplication app = (HttpApplication)sender;
app.Server.Transfer("~/Error.aspx?ErrorID=" + errorId,true);
}
第三点。也要检查你的SessionState
是否在IIS
中设置正确。
详情请访问MSDN to enable sessionstate
希望这能有所帮助..!
发布于 2014-02-20 13:02:33
据我所知,Server.Transfer将另一个页面的内容发送给客户端,而不是请求的内容。如果是这样的话,我想知道这是否与将母版页应用到错误页没有关系?几年前,我在早期的技术中也遇到过类似的错误,结果发现母版页不喜欢我想要做的事情。
我希望这至少有助于指出一个解决方案。
发布于 2014-02-19 01:57:07
为什么不在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>
https://stackoverflow.com/questions/21781691
复制相似问题