Response.End, Response.Redirect 또는 Server.Transfer를 사용하는 경우 ThreadAbortException이 발생합니다.

이 문서에서는 , Response.Redirect또는 Server.Transfer를 사용하는 Response.End경우 발생하는 ThreadAbortException 오류를 resolve 수 있습니다.

원래 제품 버전: .NET Framework 3.5 서비스 팩 1에서 ASP.NET .NET Framework 4.5.2의 ASP.NET
원본 KB 번호: 312629

증상

, Response.Redirect또는 Server.Transfer 메서드를 Response.End사용하는 경우 ThreadAbortException 예외가 발생합니다. 문을 사용하여 try-catch 이 예외를 catch할 수 있습니다.

원인

메서드는 Response.End 페이지 실행을 종료하고 애플리케이션의 이벤트 파이프라인에서 Application_EndRequest 이벤트로 실행을 이동합니다. 다음 Response.End 코드 줄은 실행되지 않습니다.

이 문제는 및 Server.Transfer 메서드에서 Response.Redirect 두 메서드가 Response.End를 내부적으로 호출하기 때문에 발생합니다.

해결 방법

이 문제를 해결하려면 다음 방법 중 하나를 사용합니다.

  • 의 경우 Response.End 대신 메서드 Response.EndHttpContext.Current.ApplicationInstance.CompleteRequest 호출하여 이벤트에 대한 코드 실행을 무시합니다Application_EndRequest.

  • 의 경우 Response.RedirectendResponse 매개 변수에 대해 false를 전달하는 Response.Redirect(String url, bool endResponse) 오버로드를 사용하여 에 대한 내부 호출 Response.End을 표시하지 않습니다. 예를 들면

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

    이 해결 방법을 사용하는 경우 다음 Response.Redirect 코드가 실행됩니다.

  • 의 경우 Server.Transfer메서드를 Server.Execute 대신 사용합니다.

ASP.NET 이 예외를 처리하지만 문을 사용하여 이 예외를 try-catch catch할 수 있습니다. 예를 들면

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

줄에 Response.Write 중단점을 추가하고 이 중단점이 적중된 것을 확인합니다. 예외를 검사할 때 ThreadAbortException 예외가 발생합니다.