Почему я получаю вызванную исключительную ситуацию, когда я выполняю Ответ. Перенаправление ()?

Две различных точки объединяются в этом вопросе, AFAICS.

[1] Да, Ubuntu 18.04 действительно имеет английский язык (Великобритания, Macintosh) в его списке. Вы видите его в снимке экрана здесь: https://linoxide.com/linux-how-to/configure-keyboard-ubuntu /

я запускаю Ubuntu на MacBook 2008 дома с расположением Mac.

можно добавить обоих и переключиться между ними: https://linuxconfig.org/how-to-add-and-switch-keyboard-layout-on-ubuntu-18-04-bionic-beaver-linux

[2] Однако это автоматически не переопределит ключи для Вас. Клавиатуры Mac имеют и Контроль (Ctrl) и Cmd (Команда) ключи. "Cmd" эквивалентен "Windows", включают современные клавиатуры компьютера, или что очень старики называют "Супер" ключом.

На Mac под управлением Ubuntu или ПК Ubuntu с клавиатурой Mac, Ctrl-C является все еще Ctrl-C. Если Вы хотите нажатия клавиш macOS-стиля (Cmd-C для копирования, и т.д.) затем необходимо повторно отобразить Ctrl на Cmd и (я предложил бы), Cmd к Ctrl.

, Который описан здесь: , Как повторно отобразить Супер (слева) ключ к клавише CTRL

N.B. Если Вы используете GNOME, то самый легкий метод безусловно находится в последнем ответе, право внизу.

6
задан MedicineMan 1 September 2009 в 21:02
поделиться

9 ответов

Это сделано специально. В статье KB описывается поведение (также для методов Request.End () и Server.Transfer () ).

For Response .Redirect () существует перегрузка:

Response.Redirect(String url, bool endResponse)

Если вы передаете endResponse = false , то исключение не генерируется (но среда выполнения продолжит обработку текущего запроса).

Если endResponse = true (или если вы используете перегрузку без аргумента bool), генерируется исключение, и текущий запрос будет немедленно завершен.

14
ответ дан 8 December 2019 в 04:54
поделиться

Это нормально. Server.Transfer () также вызывает то же исключение.

Это потому, что внутри оба метода вызывают Response.End () , который немедленно прерывает обработку текущего запроса. У Рика Стрела есть довольно хороший пост в блоге , в котором анализируется, почему вы практически ничего не можете сделать, чтобы избежать этих исключений.

3
ответ дан 8 December 2019 в 04:54
поделиться

Response.Redirect вызывает Response.End внутри, поэтому он генерирует исключение, используйте вместо этого:

Response.Redirect(url, false);
3
ответ дан 8 December 2019 в 04:54
поделиться

Это нормально в том смысле, что так должно было случиться. Обычно, когда ответ настроен на перенаправление, ASP.NET ожидает, что вы полностью выполнили запрос. Он прерывает поток, чтобы предотвратить любую другую обработку (в основном он вызывает для вас Response.End , и это вызывает исключение).

Мне кажется, что это немного злоупотребление исключениями, но так оно и работает. Вы можете использовать перегрузку со вторым параметром (и передать false ), чтобы этого не произошло, если хотите - но если да, убедитесь, что ничто другое не пытается записать в ответ!

2
ответ дан 8 December 2019 в 04:54
поделиться

Я считаю, что вам нужно следовать инструкциям в этой статье базы знаний. Response.Redirect вызывает Response.End (), если вы не использовали перегрузку, специально созданную для предотвращения такого поведения. После того, как ответ завершен, дальнейшие операции выполняться не могут, поэтому TA exc.

http://support.microsoft.com/kb/312629

1
ответ дан 8 December 2019 в 04:54
поделиться

Поведение специально предназначено для поддержки старых asp. Вот ссылка от MS, описывающая то, что вы испытываете.

http://support.microsoft.com/default.aspx?scid=kb;EN-US;312629

1
ответ дан 8 December 2019 в 04:54
поделиться

Вызов перегрузки Redirect (), которая просто берет URL также приводит к вызову Response.End (), который генерирует исключение ThreadAbort, чтобы гарантировать, что после перенаправления на вашей странице / UC не будет запущен другой код после перенаправления.

Вы не должны перехватывать это исключение .. вы должны либо игнорируйте его в своем коде или используйте перегрузку Redirect (), которая принимает логическое значение, указывающее, следует ли продолжать обработку запроса после перенаправления.

0
ответ дан 8 December 2019 в 04:54
поделиться

Здесь уже куча разумных ответов. Однако стоит отметить еще один момент. Исключение прерывания потока - одно из тех редких исключений, которое вы можете поймать и кодировать, но не можете подавить. Он автоматически повторно запускается в конце любого блока try / catch / finally независимо от того, что вы делаете.

И если вы решите жить с этим исключением, вы должны убедиться, что ваш мониторинг состояния позволяет это сделать, а не сообщите об этом как о проблеме, чтобы не застрять перед кучей нетехнических менеджеров, пытающихся объяснить, почему на вашем веб-сайте так много исключений прерывания потока. (У меня был менеджер, убежденный, что все эти прерывания потока оставляли после себя беспорядок, который, конечно, был полной противоположностью намерению прерывания потока.)

0
ответ дан 8 December 2019 в 04:54
поделиться

Да. Я кодирую подпрограмму выхода после них, но я знаю, что она не достигнута.

Я полагаю, если бы вы хотели, вы могли бы съесть исключение и продолжить послесловие, но я бы не рекомендовал это.

0
ответ дан 8 December 2019 в 04:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: