Wyjątek ThreadAbortException występuje w przypadku korzystania z elementów Response.End, Response.Redirect lub Server.Transfer
Ten artykuł ułatwia rozwiązanie błędu ThreadAbortException występującego w przypadku użycia polecenia Response.End
, Response.Redirect
lub Server.Transfer
.
Oryginalna wersja produktu: ASP.NET w wersji .NET Framework 4.5.2, ASP.NET na .NET Framework 3.5 dodatku Service Pack 1
Oryginalny numer KB: 312629
Symptomy
Jeśli używasz Response.End
metody , Response.Redirect
lub Server.Transfer
, występuje wyjątek ThreadAbortException. Możesz użyć instrukcji , try-catch
aby złapać ten wyjątek.
Przyczyna
Metoda Response.End
kończy wykonywanie strony i przenosi wykonanie do zdarzenia Application_EndRequest w potoku zdarzeń aplikacji. Poniższy wiersz kodu Response.End
nie jest wykonywany.
Ten problem występuje w metodach Response.Redirect
i Server.Transfer
, ponieważ obie metody wywołują metodę Response.End wewnętrznie.
Rozwiązanie
Aby obejść ten problem, użyj jednej z następujących metod:
W przypadku
Response.End
metody wywołajHttpContext.Current.ApplicationInstance.CompleteRequest
metodę , zamiastResponse.End
pomijać wykonywanie kodu w zdarzeniuApplication_EndRequest
.W przypadku
Response.Redirect
polecenia użyj przeciążenia Response.Redirect(String url, bool endResponse), który przekazuje wartość false dla parametru endResponse, aby pominąć wywołanie wewnętrzne doResponse.End
elementu . Przykład:Response.Redirect ("nextpage.aspx", false);
Jeśli użyjesz tego obejścia, zostanie wykonany poniższy kod
Response.Redirect
.W przypadku
Server.Transfer
polecenia użyjServer.Execute
metody zamiast tego.
Mimo że ASP.NET obsługuje ten wyjątek, możesz użyć try-catch
instrukcji , aby złapać ten wyjątek. Przykład:
try
{
Response.Redirect("nextpage.aspx");
}
catch (Exception ex)
{
Response.Write (ex.Message);
}
Dodaj punkt przerwania w wierszu Response.Write
i zwróć uwagę, że ten punkt przerwania został trafiony. Podczas badania wyjątku należy zauważyć, że występuje wyjątek ThreadAbortException.
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla