首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Server.Transfer导致会话异常

Server.Transfer导致会话异常
EN

Stack Overflow用户
提问于 2014-02-14 22:14:46
回答 8查看 3.8K关注 0票数 17

在我的全局代码中,当发生错误时,我需要处理以下代码

代码语言:javascript
复制
//[..] 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是这里的问题所在。那是什么?

编辑代码:

代码语言:javascript
复制
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)
                {
                }
            }
EN

回答 8

Stack Overflow用户

发布于 2014-02-19 16:40:14

因为你没有发布太多的代码。所以没有看到你所做的实际实现。我可以向你推荐以下几点。

第一点。首先,你需要检查SessionState是否是页面的enabled。您可以在web.config文件中全局设置它们。在web.config中尝试下面给出的snippet

代码语言:javascript
复制
<configuration>   
   <system.web>
   <pages enableSessionState="true" />
  </system.web>
</configuration>

点2.并把你的Redirection in Application_Error in Global.asax

代码语言:javascript
复制
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

希望这能有所帮助..!

票数 2
EN

Stack Overflow用户

发布于 2014-02-20 13:02:33

据我所知,Server.Transfer将另一个页面的内容发送给客户端,而不是请求的内容。如果是这样的话,我想知道这是否与将母版页应用到错误页没有关系?几年前,我在早期的技术中也遇到过类似的错误,结果发现母版页不喜欢我想要做的事情。

我希望这至少有助于指出一个解决方案。

票数 1
EN

Stack Overflow用户

发布于 2014-02-19 01:57:07

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

代码语言:javascript
复制
<customErrors mode="Off" defaultRedirect="~/Common/Error.aspx">
  <error statusCode="403" redirect="~/SM_AccessDenied.aspx" />
  <error statusCode="404" redirect="~/Common/FileNotFound.aspx" />
</customErrors>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21781691

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档