2011-01-13 10 views
7

Ist es notwendig, Response.End() nach Response.Redirect (url)Aufruf Response.End() nach Response.Redirect()

aktualisieren

Danke für alle Antworten zu nennen. Da einige Antworten sagen, dass es notwendig ist und andere nein sagen, habe ich mehr gesucht und in msdn unter den folgenden Bemerkungen gefunden:

Umleiten von Aufrufen Beenden, das eine ThreadAbortException-Ausnahme nach Abschluss auslöst.

+0

ich dies hatte in mein Beitrag –

+0

@ m.edmondson: Ja und ich gebe dir +1 und das akzeptiere :) Ich habe deine Antwort nicht gesehen, bevor ich die Antwort selbst auf msdn gefunden habe. Deshalb habe ich neu gesucht und mein Update geschrieben. – HCL

+1

Siehe im Zusammenhang [Antwort-Ende-in Betracht gezogen-schädlich] (http://stackoverflow.com/questions/1087777/is-response-end-consided-harmful) –

Antwort

11

Response.Redirect Anrufe Response.End für Sie verwenden, beenden müssen

Ich stimme seiner guten Praxis nicht zu - es führt zu irreführendem Code.

MSDN:

Redirect Anrufe zu beenden, die ein Threadabort Ausnahme Nach Beendigung aufwirft.

Die Gesetze der HTTP erklären, dass, sobald eine Antwort auf den Server gesendet wird, erfolgt (nicht mehr Code wird aufgerufen)

-1

Erforderlich oder nicht, es ist immer noch eine gute Methode, Response.End() am Ende der Antwort aufzurufen. Es wird auch nichts weh tun.

+0

Es wird weh tun, weil sein Code Unordnung - nichts wird nach Antwort aufgerufen werden .Redirect() also warum hat es überhaupt drin? –

+1

Eigentlich tut es Dinge weh. Response.End funktioniert, indem eine ThreadAbortException ausgelöst wird. Dies kann alle möglichen unangenehmen Nebenwirkungen in Ihrer Anwendung haben. Eine, die ich getroffen habe, ist, dass eine TransactionScope-Transaktion nicht aus lokalem Thread-Speicher gelöscht wurde, also das nächste Mal, als der Thread versuchte, einen TS zu bombardieren. Und würde weiter bombardieren, bis der Apppool recycelt wurde. Das Ende ist für klassische asp asp.net-Migrationen, aber es ist nicht etwas, das Sie verwenden sollten. Es ist bedauerlich, dass MS bis .Net 4 nahm, um dies wirklich zu dokumentieren und Response.CompleteRequest hinzuzufügen. – Andy

+0

Siehe: http://msdn.microsoft.com/en-us/library/a8wa7sdt.aspx und http://msdn.microsoft.com/en-us/library/system.web.httpresponse.end.aspx – Andy

4

Mit Response.Redirect können Sie Response.End aufrufen.

Response.Redirect(url, true); 
2

Es ist nicht notwendig Response.End, in der Tat zu nennen, wenn Sie denken, dass Sie die Antwort der Überlastung von Response.Redirect (url, EndResponse)