Gibt es etwas, das verhindert, dass Antwort.Umleitung für die Arbeit im inneren try-catch-block?
Bekam ich einige seltsame Fehler mit response.redirect()
und das Projekt nicht bauen auf alles.. wenn ich entfernt die try-catch - - block, der war rund um die code-block, wo Response.Redirect()
war in ihm arbeitete normal..
Wollen einfach nur wissen, ob dies ein bekanntes Problem oder so...
- Können Sie nach dem code, dass das nicht bauen?
- Ich Stimme den meisten Antworten hier können nur erahnen, was passiert ist. Die fortgesetzte Handlung eine threadabortexception kann verwandt werden, aber es schwer zu sagen, ohne das tatsächlich Fehler, die aufgetreten sind und die gleichen Beispiel-code.
- Seinen code nicht selbst kompilieren, warum reden wir über das werfen und fangen "ThreadAbortException"?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn ich mich richtig erinnere,
Response.Redirect()
wirft eine exception zum Abbruch der aktuellen Anforderung (ThreadAbortedException
oder so ähnlich). So könnten Sie abfangen der Ausnahme.Edit:
Diese KB-Artikel beschreibt dieses Verhalten (auch für die
Request.End()
undServer.Transfer()
Methoden).Für
Response.Redirect()
es besteht eine überlast:Wenn Sie pass
endResponse=false
, dann wird die Ausnahme nicht ausgelöst (aber die Laufzeit wird weiterhin die Bearbeitung der aktuellen Anfrage).Wenn
endResponse=true
(oder wenn die andere überladung verwendet wird), wird die Ausnahme geworfen und die aktuelle Anfrage wird sofort gekündigt werden.Redirect
wird weiterhin die Ausführung der Anfrage (oder zumindest Funktionen, die auf aktuellen stack), in dem Fall interessant Nebenwirkungen (D. H. persistierende Informationen oder Anmeldung nicht ausgeführt, wenn exception geworfen wird). Sorgfalt getroffen werden müssen nicht zu laufen, alle nicht-trivialen code nach absichtlich umleiten.Als Martin weist darauf hin, Antwort.Redirect löst eine ThreadAbortException. Die Lösung ist neu-Ausnahme:
Martin korrekt ist, wird eine ThreadAbortException geworfen erhält, wenn Sie eine Antwort.Umleiten, finden Sie unter der kb-Artikel hier
Müssen Sie möglicherweise auf eine variable, die deklariert wird innerhalb des try-Blocks.
Zum Beispiel, der folgende code wird ungültig:
Sollten Sie aus der b-Deklaration außerhalb des try-catch-block.
Ich glaube nicht, dass es irgendein bekanntes Problem hier.
Können Sie einfach nicht tun, einen Redirect() in einem try/catch-block, weil Redirect verlässt das aktuelle Steuerelement zu einem anderen .aspx (zum Beispiel), bleibt der Haken in der Luft (kann nicht kommen zurück, um es).
EDIT: Auf der anderen Seite, vielleicht hatte ich all dies dachte, nach hinten. Sorry.