Подтвердить что ты не робот

Response.Redirect и поток прерывали ошибку?

У меня была эта ошибка Тема прерывалась. сегодня днем ​​в журнале ошибок.

Код, вызвавший эту ошибку:

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

Если изменить значение bool на false, журнал ошибок станет пустым, и эта ошибка перестанет появляться, но программа перестанет работать.

Если я сохраню его как таковой, я получаю эту ошибку как неприятность.

Я хочу знать альтернативу для использования Response.Redirect передачи true в качестве значения для параметра endResponse.

4b9b3361

Ответ 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)

Это не приводит к прерыванию нитей и не требует многократных уловов.