2011-01-13 2 views
7

Нужно ли называть response.end() после Response.Redirect (URL)вызова response.end() после Response.Redirect()

Update

Спасибо за ответы на все вопросы. Потому что некоторые ответы говорят, что это необходимо, а другие - нет, я искал больше и нашел в msdn по замечаниям следующее:

Переадресация вызовов Конец, который вызывает исключение ThreadAbortException по завершении.

+0

Я имел это в мой пост –

+0

@ m.edmondson: Да, и я даю вам +1 и принимаю :) Я не видел вашего ответа, прежде чем сам нашел ответ на msdn. Вот почему я снова искал и написал свое обновление. – HCL

+1

См. Соответствующий [ответ-конец-вредный] (http://stackoverflow.com/questions/1087777/is-response-end-considered-harmful) –

ответ

11

Response.Redirect звонки Response.End для вас

Я не согласен с его хорошей практикой - это приводит к вводит в заблуждение код.

MSDN:

Перенаправление вызовов Конец, который вызывает исключение ThreadAbortException после завершения.

Законы HTTP объясняют, что когда-то ответ посылается на сервер делается (не больше код не вызывается)

-1

Обязательно или нет, это хорошая практика для вызова Response.End() в конце ответа. Это тоже ничего не повредит.

+0

Будет больно, потому что его код беспорядок - ничто не будет вызвано после ответа .Redirect(), так зачем вообще это делать? –

+1

На самом деле это причиняет боль. Response.End работает, бросая исключение ThreadAbortException. Это может иметь всевозможные неприятные побочные эффекты в вашем приложении. Тот, который я ударил, заключается в том, что транзакция TransactionScope не была очищена от локального хранилища потоков, поэтому в следующий раз, когда этот поток попытался использовать TS, он бомбил. И продолжал бомбить, пока аппарель не будет переработана. End существует для классического asp для миграции asp.net, но это не то, что вы должны использовать. Несчастливо, что MS заняла до тех пор, пока .Net 4 действительно не документирует это и не добавит Response.CompleteRequest. – Andy

+0

См. Http://msdn.microsoft.com/en-us/library/a8wa7sdt.aspx и http://msdn.microsoft.com/en-us/library/system.web.httpresponse.end.aspx – Andy

4

Response.Redirect позволяет вам вызвать Response.End.

Response.Redirect(url, true); 
2

Это не нужно вызывать response.end, на самом деле, если вы думаете, что вам нужно, чтобы закончить ответ использовать перегрузку Response.Redirect (URL, endResponse)

Смежные вопросы