2010-12-06 19 views
12

Ich hatte diesen Fehler Thread wurde abgebrochen., heute Nachmittag in meinem Fehlerprotokoll.Response.Redirect und Thread wurde abgebrochen Fehler?

Der Code, der diesen Fehler verursacht ist:

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

Wenn ich den bool Wert false ändern, wird das Fehlerprotokoll leer und dieser Fehler wieder aufhört zu kommen, aber das Programm nicht mehr funktioniert.

Wenn ich es so halte, bekomme ich diesen Fehler wie Ärgernis.

Ich möchte die Alternative zur Verwendung von Response.Redirect kennen, die true als Wert für den Parameter endResponse übergeben.

+2

Auschecken http://msdn.microsoft.com/en-us/library/a8wa7sdt(VS.80).aspx – Mike

+1

Respose.Redirect wird Response.End intern aufrufen, es kann unterdrückt werden, indem 'false' verwendet wird (Response.Redirect (Login.aspx, false);). Aber es sollte nicht dazu führen, dass das Programm nicht mehr funktioniert. – wizzardz

+1

Es kann verhindern, dass das Programm funktioniert, wenn nach der Weiterleitung andere Logik verarbeitet wird, die andernfalls nicht verarbeitet würde, wenn die Ausnahme ausgelöst wurde. –

Antwort

17

Ich fange diese Ausnahme und schlucke es, weil ASP.NET Ausnahmen für die Ablaufsteuerung statt für einen außergewöhnlichen Umstand verwendet.

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. 
} 
+0

Was wird im Fehlerprotokoll gedruckt werden, wenn ich Thread-Ausnahme anstelle von normalen Ausnahme verwenden? –

+0

Wenn Sie die Ausnahme fangen und schlucken dann nichts, weil keine Ausnahme an den Punkt kommt, wo es geloggt wird. Es klingt auch so, als müssten Sie nachlesen, wie Ausnahmen funktionieren. –

+0

Tut mir leid, ich habe nicht installiert.Netz in meinem Heimsystem. Ich zweifelte also. –

2

Sie können wie diese Response.Redirect ändern ("Login.aspx", false) es abbrechen dann gewohnt.

3

Wie in Response.Redirect(url) Threadabort Lösung angegeben:

Der Threadabort ausgelöst wird, wenn Sie einen Anruf zu Response.Redirect(url) machen, weil das System der Verarbeitung des Themas aktuellen Webseite abgebrochen, nachdem es die Umleitung auf die Antwort sendet Strom. Response.Redirect(url) tatsächlich einen Anruf an Response.End() intern, und es ist Response.End(), die Thread.Abort() ruft, die Blasen den Stapel, um den Thread zu beenden. In seltenen Fällen ruft der Anruf Response.End() tatsächlich nicht Thread.Abort(), sondern ruft stattdessen HttpApplication.CompleteRequest().

Oder bewegen Sie einfach Response.Redirect("~/Membership/UserRegistration.aspx"); aus dem Try/Catch-Block.

1

Für alle gefangen Fehler, bei denen Sie umleiten möchten, erstellen Sie ein ‚GoTo‘ aus dem Try-Catch bestimmt wie folgt:

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) 

Dieser weder Thread Abtreibung verursacht erfordert noch mehrere Fänge.

Verwandte Themen