Подтвердить что ты не робот

Когда следует использовать Response.Redirect(url, true)?

Я перенаправляюсь на страницу с предупреждением об ошибке в моем Application_Error, в Global.asax.

В настоящий момент говорится:

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

Должно быть:

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

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

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

Enter image description here

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

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

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

Ответ 3

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

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

или

Response.Redirect("Error.aspx");

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

Ответ 4

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

Ответ 5

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