Response.Redirect и поток прерывал ошибку? - PullRequest
12 голосов
/ 06 декабря 2010

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

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

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

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

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

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

Ответы [ 4 ]

17 голосов
/ 06 декабря 2010

Я ловлю это исключение и проглатываю его, потому что 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.
}
3 голосов
/ 20 ноября 2014

Как указано в 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 голосов
/ 30 декабря 2013

вы можете изменить, как это Response.Redirect ("Login.aspx", false) тогда оно не прервется.

1 голос
/ 07 декабря 2014

Для всех обнаруженных ошибок, на которые вы хотите перенаправить, создайте 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)

Это не вызывает прерывания потока и не требует многократных захватов.

...