ThreadAbortException при вызове Response.End

357
13 января 2017, 07:13

Проблема в том, что метод Response.End вызывает исключение ThreadAbortException, которое мешает дебажить.

Задача состоит в том, чтобы не возникало данное исключение.

Метод Response.Redirect ("nextpage.aspx", false) продолжит дальнейшее выполнение кода, что не допустимо в моем случае так, как далее свалится 500-я ошибка.

Как обойти эту ситуацию?

Как прервать дальнейшее выполнение кода при вызове метода Response.Redirect("nextpage.aspx", false)?

Answer 1

Никак.

На момент вызова Response.End вы обычно достаточно глубоко в стеке вызова методов. Каждый из которых может что-то возвращать. Единственный способ выйти из метода, не возвращая при этом значение - вылететь с исключением.

Поэтому Response.End останавливает обработку запроса бросанием исключения, которое ловится выше по коду рантаймом, и превращается в редирект.

Т.е. вариантов у вас всего два:

  • [Правильный] Аккуратно вернуть результат из всех методов, до самого контроллера. В контроллере вернуть RedirectResult.
  • Заглушить ловлю исключений студией при отладке - снять чекбокс остановки на ThreadAbortException в Debug / Windows / Exceptions.

Первый вариант предпочтительнее, т.к. иначе редирект через Response.Redirect обеспечит вам трудноуловимые баги с "cannot redirect after http-headers sent" при случайном смешивании Response.Redirect и MVC-ного RedirectResult.

READ ALSO
Как перевести код с Matlab на C#?

Как перевести код с Matlab на C#?

Здравствуйте! Есть один довольно большой проект на MATLAB, который желательно перевести на С#

527
Interface vs Abstract class [дубликат]

Interface vs Abstract class [дубликат]

На данный вопрос уже ответили:

408
Есть ли какая-то выгода от использования Dispatcher в WinForms?

Есть ли какая-то выгода от использования Dispatcher в WinForms?

В WinForms можно воспользоваться классов WPF- Dispatcher для доступа к UI из разных потоков

317
Почему код работает не корректно? [требует правки]

Почему код работает не корректно? [требует правки]

Надо чтобы софт находил хеш даже если заменил комбинации, но почему-то он и не находит, не знаю почему

455