Страницы

Поиск по вопросам

суббота, 4 января 2020 г.

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

#c_sharp #net #aspnet #aspnet_mvc #исключения


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

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

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

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

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


Ответы

Ответ 1



Никак. На момент вызова Response.End вы обычно достаточно глубоко в стеке вызова методов. Каждый из которых может что-то возвращать. Единственный способ выйти из метода, не возвращая при этом значение - вылететь с исключением. Поэтому Response.End останавливает обработку запроса бросанием исключения, которое ловится выше по коду рантаймом, и превращается в редирект. Т.е. вариантов у вас всего два: [Правильный] Аккуратно вернуть результат из всех методов, до самого контроллера. В контроллере вернуть RedirectResult. Заглушить ловлю исключений студией при отладке - снять чекбокс остановки на ThreadAbortException в Debug / Windows / Exceptions. Первый вариант предпочтительнее, т.к. иначе редирект через Response.Redirect обеспечит вам трудноуловимые баги с "cannot redirect after http-headers sent" при случайном смешивании Response.Redirect и MVC-ного RedirectResult.

Комментариев нет:

Отправить комментарий