Response.redirect повышает "Thread был прерван"
У меня есть код VB.NET, когда мне нужно удалить объект из базы данных. On Page_load Я проверяю, не отсылает ли он назад (чтобы предотвратить обновление вручную), и после удаления объекта я перенаправляюсь на страницу вызывающего абонента с помощью Response.redirect. На этом этапе мой код вызывает
исключение: EXCEPTION OCCURS In File_delete.aspx.vb Номер строки: 34 Сообщение об ошибке: Тема была прервана.
а в средстве просмотра событий я вижу, что сбой aspnet_wp.exe:
aspnet_wp.exe(PID: 1532) остановлен неожиданно.
Дополнительные сведения см. в справке и Центр поддержки http://go.microsoft.com/fwlink/events.asp.
Не понятно, почему это происходит только здесь, потому что я также использую response.redirect для просмотра файла и не только для его удаления.
Ответы
Ответ 1
По умолчанию Response.Redirect()
отменяет текущий поток. Естественно, это бросает a ThreadAbortException
. Этого можно предотвратить, передав false
в Response.Redirect()
, который не прервет текущий поток.
Помните, что это значит. Если поток не прерывается, код, следующий за Response.Redirect()
, будет продолжать выполняться. Контролируйте свой логический поток соответственно. (Это часто делается с помощью операторов return
и других директив управления потоками после перенаправления.)
Ответ 2
Response.Redirect
всегда будет генерировать ThreadAbortException
соответствии с документацией MSDN, если вы не endResponse
false
логическое значение для входного параметра endResponse
HttpRequest.Redirect(string, bool)
.
Просто дайте false
параметру endResponse
.
Ответ 3
Список вариантов решения этой проблемы, изложенных здесь, работал у меня (я использовал № 2):
https://gist.github.com/cemerson/9dea993044a4e7fdca0e
Ответ 4
Response.Redirect
генерирует исключение по дизайну. Все в порядке.
Ответ 5
Это может произойти, когда вы делаете асинхронные вызовы. Используйте Response.Redirect(string url, false), где string url - это URL-адрес перенаправления.