Asp.net 响应。重定向和线程被中止错误?
我有一个错误线程被中止。,今天下午在我的错误日志中 导致此错误的代码是:Asp.net 响应。重定向和线程被中止错误?,asp.net,boolean,redirect,response.redirect,Asp.net,Boolean,Redirect,Response.redirect,我有一个错误线程被中止。,今天下午在我的错误日志中 导致此错误的代码是: Response.Redirect("Login.aspx", true); 如果我将bool值更改为false,则错误日志将变为空,并且此错误再次出现,但程序停止工作 如果我保留它,我会像讨厌一样得到这个错误 我想知道使用Response.Redirect传递true作为endResponse参数的值的替代方法。我捕获此异常并接受它,因为ASP.NET将异常用于流控制,而不是用于异常情况 try { // Do
Response.Redirect("Login.aspx", true);
如果我将bool
值更改为false
,则错误日志将变为空,并且此错误再次出现,但程序停止工作
如果我保留它,我会像讨厌一样得到这个错误
我想知道使用
Response.Redirect
传递true
作为endResponse
参数的值的替代方法。我捕获此异常并接受它,因为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.
}
你可以这样改变
重定向(“Login.aspx”,false)
然后它将不会中止。如
响应.重定向(url)
线程中止异常解决方案中所述:
调用时会引发ThreadAbortException
Response.Redirect(url)
,因为系统中止了对
将重定向发送到响应后的当前网页线程
小溪Response.Redirect(url)
实际上调用了Response.End()
在内部,调用Thread.Abort()
的是Response.End()
使堆栈冒泡以结束线程。在极少数情况下
调用Response.End()
实际上并不调用Thread.Abort()
,而是
而是调用HttpApplication.CompleteRequest()
或者简单地移动Response.Redirect(“~/Membership/UserRegistration.aspx”)代码>退出Try/Catch块。对于要重定向的所有捕获到的错误,按如下所示创建一个从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)
这既不会导致线程中止,也不需要多个捕获。签出响应。重定向将调用响应。在内部结束时,可以使用“false”(Response.Redirect(Login.aspx,false);)。但它不应导致程序停止工作。如果重定向后正在处理其他逻辑,则它可以停止程序工作。如果引发异常,则无法处理这些逻辑。@wizzard。。它可以工作,但不允许在页面上携带我的会话变量。@谢谢Mike。站点链接非常有用。如果我使用线程异常而不是普通异常,那么错误日志中将打印什么?如果捕获并吞下异常,则什么都没有,因为没有异常会到达记录它的点。听起来你也需要了解异常是如何工作的。对不起,我没有在我的家庭系统中安装.net。所以我有一个疑问。OtherExceptionTypes的名称空间是什么?直到您可以将多个catch()附加到一个try块