Response.Redirect и поток прерывали ошибку?
У меня была эта ошибка Тема прерывалась. сегодня днем в журнале ошибок.
Код, вызвавший эту ошибку:
Response.Redirect("Login.aspx", true);
Если изменить значение bool
на false
, журнал ошибок станет пустым, и эта ошибка перестанет появляться, но программа перестанет работать.
Если я сохраню его как таковой, я получаю эту ошибку как неприятность.
Я хочу знать альтернативу для использования Response.Redirect
передачи true
в качестве значения для параметра endResponse
.
Ответы
Ответ 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.
}
Ответ 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
Для всех пойманных ошибок, в которых вы хотите перенаправить, создайте "GoTo" из сущности 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)
Это не приводит к прерыванию нитей и не требует многократных уловов.