2011-01-13 20 views
7

Czy trzeba zadzwonić Response.End() po Response.Redirect (URL)nazywając Response.End() po Response.Redirect()

Aktualizacja

Dzięki za wszystkie odpowiedzi. Ponieważ niektóre odpowiedzi mówią, że jest to konieczne, a inne nie, szukam więcej i znalazłem w msdn pod uwagami:

Przekierowanie połączeń Koniec, który po wyjściu wywołuje wyjątek ThreadAbortException.

+0

miałem to w mój post –

+0

@ m.edmondson: Tak, daję ci +1 i akceptuję :) Nie widziałem twojej odpowiedzi zanim sam znalazłem odpowiedź na msdn. Dlatego właśnie przeszukałem nowo i napisałem moją aktualizację. – HCL

+1

Zobacz powiązane [odpowiedź-koniec-uważane-szkodliwe] (http://stackoverflow.com/questions/1087777/is-response-end-considered-efective) –

Odpowiedz

11

Response.Redirect połączeń Response.End dla Ciebie

Nie zgadzam się z jego dobrą praktyką - prowadzi to do wprowadzającego w błąd kodu.

MSDN:

Przekierowanie połączeń koniec, który zgłasza wyjątek ThreadAbortException momencie zakończenia.

Ustawodawstwa HTTP wyjaśnić, że gdy odpowiedź jest wysyłana do serwera odbywa się (nie więcej kod zostanie wywołany)

-1

Konieczne lub nie jest jeszcze dobrą praktyką wywołanie Response.End() na końcu odpowiedzi. Z pewnością nic też nie zaszkodzi.

+0

Będzie bolało, ponieważ jego bałagan kodu - nic nie zostanie wywołane po odpowiedzi .Redirect(), więc po co w ogóle to mieć? –

+1

Właściwie to boli rzeczy. Response.End działa, rzucając wyjątek ThreadAbortException. Może to mieć wiele nieprzyjemnych skutków ubocznych w twojej aplikacji. Jeden, który uderzyłem, to że transakcja TransactionScope nie została wyczyszczona z lokalnego magazynu wątków, więc następnym razem, gdy wątek próbował użyć TS, został zbombardowany. Będziemy bombardować, aż do momentu, gdy aplikacja zostanie poddana recyklingowi. Koniec jest dla klasycznych asp do migracji asp.net, ale nie jest to coś, co powinieneś używać. To niefortunne, że MS trwało do .Net 4, aby to naprawdę udokumentować i dodać Response.CompleteRequest. – Andy

+0

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

4

Response.Redirect pozwala na wywołanie Response.End.

Response.Redirect(url, true); 
2

Nie trzeba zadzwonić Response.End, w rzeczywistości, jeśli uważasz, że trzeba zakończyć odpowiedź użyć przeciążenie Response.Redirect (url, endResponse)

Powiązane problemy