我的错误日志中出现了此错误线程正在中止。。
导致此错误的代码是:
Response.Redirect("Login.aspx", true);
如果我将bool
值更改为false
,则错误日志将变为空,此错误将再次停止,但程序将停止工作。
如果我保留这样的话,我会发现这个错误就像滋扰一样。
我想知道使用Response.Redirect
传递true
作为endResponse
参数值的替代方法。
答案 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)
答案 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)
这既不会导致线程中止,也不需要多次捕获。