ThreadAbortException возникает при использовании Response.End, Response.Redirect или Server.Transfer

Эта статья поможет устранить ошибку ThreadAbortException, возникающую при использовании Response.End, Response.Redirectили Server.Transfer.

Исходная версия продукта: ASP.NET на платформа .NET Framework 4.5.2, ASP.NET в платформа .NET Framework 3.5 с пакетом обновления 1 (SP1)
Исходный номер базы знаний: 312629

Симптомы

При использовании Response.Endметода , Response.Redirectили Server.Transfer возникает исключение ThreadAbortException. Для перехвата try-catch этого исключения можно использовать инструкцию .

Причина

Метод Response.End завершает выполнение страницы и перемещает его на событие Application_EndRequest в конвейере событий приложения. Следующая строка кода Response.End не выполняется.

Эта проблема возникает в методах иServer.Transfer, Response.Redirect поскольку оба метода вызывают Response.End внутренне.

Разрешение

Чтобы обойти эту проблему, используйте один из следующих методов:

  • Для Response.End вызовите HttpContext.Current.ApplicationInstance.CompleteRequest метод вместо обхода Response.End выполнения кода в Application_EndRequest событие .

  • Для Response.Redirectиспользуйте перегрузку Response.Redirect(String URL, bool endResponse), которая передает значение false для параметра endResponse, чтобы подавить внутренний вызов Response.End. Например:

     Response.Redirect ("nextpage.aspx", false);
    

    Если вы используете это обходное решение, выполняется приведенный ниже Response.Redirect код.

  • Для Server.Transferиспользуйте Server.Execute метод .

Хотя ASP.NET обрабатывает это исключение, для перехвата try-catch этого исключения можно использовать инструкцию . Например:

try
{
    Response.Redirect("nextpage.aspx");
}
catch (Exception ex)
{
    Response.Write (ex.Message);
}

Добавьте точку останова в линию Response.Write и обратите внимание, что эта точка останова достигнута. При изучении исключения обратите внимание, что возникает исключение ThreadAbortException.