Response.Redirect en ThreadAbortException

Op het werk kwamen we er gisteren achter dat wanneer je een Response.Redirect doet je een ThreadAbortException in je applicatie krijgt. Tenminste, als je de redirect doet in een try-catch blok.

Deze exception is ‘by design’ in het .Net Framework gestopt. De reden hiervoor is dat het de bedoeling is dat de huidige pagina niet door hoeft te gaan met uitvoeren en je gelijk naar de andere pagina wilt gaan.
Door middel van deze exception wordt dit bewerkstelligd.

Aangezien we dit nog niet wisten, werden er enkele reacties gespuwd over deze oplossing voor het beëindigen van een web-pagina. Onze team-leider kwam net een leuke analogie, namelijk:

Het is alsof je met een auto moet remmen en dan maar een steeksleutel in de moter gooit om te stoppen. De auto komt dan ook stil te staan.

Persoonlijk vond ik dat wel een leuk statement.
Na even te hebben gezocht op dit ‘probleem’ kwam ik op een Microsoft pagina uit. Hier staat het probleem beschreven en is er ook een oplossing beschikbaar. Eerst de https://support.microsoft.com/kb/312629.

De oplossing luidt dat je een overloaded functie moet gebruiken van de Response.Redirect, namelijk Response.Redirect(String url, bool endResponse). Door de tweede parameter op `false te zetten zul je geen exception krijgen.

Oh ja, zoals in de MS-link is te lezen geldt dit probleem ook voor Response.End en Server.Transfer functies. Voor deze twee wordt ook een work-around aangeboden in hetzelfde artikel.


Share