【问题标题】:Response.Redirect and thread was being aborted error?Response.Redirect 和线程被中止错误?
【发布时间】:2010-12-06 16:31:20
【问题描述】:

我遇到了这个错误线程被中止。,今天下午在我的错误日志中。

导致这个错误的代码是:

Response.Redirect("Login.aspx", true);

如果我将bool 的值更改为false,错误日志将变为空并且此错误不再出现,但程序停止工作。

如果我保留它,我会收到类似滋扰的错误。

我想知道使用Response.Redirect 传递true 作为endResponse 参数的值的替代方法。

【问题讨论】:

  • Respose.Redirect 会在内部调用 Response.End ,可以通过 'false' (Response.Redirect (Login.aspx, false);) 来抑制。但不会导致程序停止虽然工作。
  • 如果重定向后正在处理其他逻辑,则可以停止程序工作,否则如果引发异常则不会处理。
  • @wizzard.. 它的工作原理,但它不允许在页面上携带我的会话变量。
  • @谢谢迈克。站点链接非常有用。

标签: asp.net boolean redirect response.redirect


【解决方案1】:

我捕捉到这个异常并将其吞下,因为 ASP.NET 使用异常来进行流控制,而不是用于异常情况。

try
{
    // Do stuff.
}
catch(ThreadAbortException)
{
    // Do nothing. ASP.NET is redirecting.
    // Always comment this so other developers know why the exception 
    // is being swallowed.
}
catch(OtherExceptionTypes ex)
{
    // Log other types of exception.
}

【讨论】:

  • 如果我使用线程异常而不是普通异常,错误日志中会打印什么?
  • 如果你捕获并吞下异常然后什么都没有,因为没有异常到达它被记录的地步。听起来您也需要了解异常的工作原理。
  • 对不起,我没有在我的家庭系统中安装 .net。所以我很怀疑。
  • OtherExceptionTypes 的命名空间是什么?
  • TIL 你可以将多个 catch() 附加到一个 try 块上
【解决方案2】:

如Response.Redirect(url)ThreadAbortException 中所述解决方案:

调用时会抛出 ThreadAbortException Response.Redirect(url) 因为系统中止处理 将重定向发送到响应后的当前网页线程 溪流。 Response.Redirect(url) 实际上拨打了Response.End() 在内部,它是 Response.End() 调用 Thread.Abort() 使堆栈冒泡以结束线程。在极少数情况下 打电话给Response.End() 实际上不打电话给Thread.Abort(),但是 而是调用HttpApplication.CompleteRequest()。

或者只是将Response.Redirect("~/Membership/UserRegistration.aspx"); 移出 Try/Catch 块。

【讨论】:

    【解决方案3】:

    你可以这样改变 Response.Redirect ("Login.aspx",false) 然后它不会中止。

    【讨论】:

      【解决方案4】:

      对于您想要重定向的所有捕获的错误,创建一个从 Try Catch 指定的“GoTo”,如下所示:

          Try 
      
             'do stuff
      
          Catch ex As Exception
      
              'logging
              GoTo MyRedirection
      
          End Try
      
          'Prevent redirection in case of no errors
          Exit Sub
      
      MyRedirection:
          Response.Redirect("login.aspx", True)
      

      这既不会导致线程中止,也不需要多次捕获。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-08-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多