Response.Redirect和线程被中止错误?

时间:2010-12-06 16:31:21

标签: asp.net boolean redirect response.redirect

我的错误日志中出现了此错误线程正在中止。

导致此错误的代码是:

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

如果我将bool值更改为false,则错误日志将变为空,此错误将再次停止,但程序将停止工作。

如果我保留这样的话,我会发现这个错误就像滋扰一样。

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

4 个答案:

答案 0 :(得分:17)

我抓住了这个异常并吞下它,因为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.
}

答案 1 :(得分:3)

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块。

答案 2 :(得分:2)

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

答案 3 :(得分:1)

对于您要重定向的所有已捕获错误,请创建一个“GoTo”#39;注定要离开Try Catch如下:

    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)

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