Когда Я Должен Использовать Response.Перенаправление (url, true)?

я перенаправляю на страницу ошибки с исправленным сообщением об ошибке в моем Application_Error, в глобальном.асакс.

на данный момент он говорит:

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

должно быть:

Response.Redirect("Error.aspx", false); 

Я не уверен, при каких обстоятельствах я должен использовать true и что я должен использовать false? The страница MSDN говорит, что предпочитает использовать false чтобы избежать ThreadAbortExceptions, поэтому, когда я должен использовать true?

5 ответов


вы используете false когда вы не хотите прерывать поток. Это значит, что false вызовет продолжение выполнения кода. Итак, строки кода, которые появляются после Response.Redirect будет выполнен. А true просто убьет поток, поэтому ничего больше не будет выполняться, что в свою очередь бросает ThreadAbortException.

так что это действительно решение, основанное на том, как выглядит остальная часть кода в этой ситуации. Как правило, вы хотите поставить вызовы Response.Redirect в конце исполнения путь, так что ничего больше не нужно выполнять. Но во многих случаях это не так. Это просто вопрос того, как вы управляете логическим потоком в коде.

например, если следующая строка после Response.Redirect это return и путь выполнения просто заканчивается, тогда вы, вероятно, в порядке. Но если есть все виды логики и выполнение ее в этом случае оставит систему в неизвестном состоянии, то вы можете захотеть прервать поток.

лично я считаю, что прерывание thread будет указывать на плохой логический контроль. Это похоже на хорошо известный запах кода, где исключения используются для управления логическим потоком, который повсеместно неодобрительно. Если вы можете управлять логическим потоком без необходимости прерывания потока и создания исключения, это, вероятно, будет предпочтительнее.


Enter image description here

ответ.Перенаправление (URL, false): клиент перенаправляется на новую страницу, и текущая страница на сервере будет продолжать обработку.

ответ.Перенаправление (URL,true): клиент перенаправляется на новую страницу, но обработка текущей страницы прерывается.

вы также можете увидеть это видео, которое наглядно демонстрирует различия ответ.Перенаправление (False vs True) ASP.NET вопросы интервью с ответы.


вам никогда не нужно использовать true, так как там перегрузка без логического параметра.

Response.Redirect("Error.aspx", false);

или

Response.Redirect("Error.aspx");

был добавлен логический параметр, чтобы вы могли установить перенаправление без остановки выполнения. Если вы можете выйти из кода страницы самостоятельно, не вызывая никаких дополнительных затрат, например, привязки данных, это предпочтительнее.


здесь лучше всего использовать true, потому что вы хочу все остальные потоки для прерывания; произошла ошибка,и приложение не может продолжить.


Если вы установите значение true, приложение завершает ответ и отправляет его обратно пользователю, а если вы установите значение false, код после перенаправления будет продолжать выполняться, и пользователь будет перенаправлен на новую страницу после завершения полного жизненного цикла загрузки страницы.