Response.Redirect вызывает Visual Studio, чтобы остановить выполнение - PullRequest
0 голосов
/ 25 февраля 2020

Когда вызывается Response.Redirect, выдается исключение System.Threading.ThreadAbortException. Я прекрасно с этим справляюсь, так как альтернатива состоит в том, что слишком много моего кода выполняется на недопустимой странице.

Моя проблема в том, что Visual Studio ломается, когда я нажимаю эту строку, и говорю мне: «Исключение - пользователь не обработан» ». Я знаю, что это не обрабатывается моим кодом. Так не должно быть. Сервер IIS будет в порядке, съедая исключение и перенаправляя конечного пользователя. Как заставить Visual Studio заткнуться об этом?

То, что я пробовал, не сработало:

  1. Откройте настройки исключений в всплывающем окне и " перерыв, когда этот тип исключения является необработанным пользователем, «флажок НЕ установлен» поле пустое, поэтому никаких условий нет.
  2. Я нажал «Открыть настройки исключений», и появилось новое окно с множеством типов исключений. Я искал ThreadAbortException и увидел, что он не был проверен.
    1. Я попытался установить и снять флажок
    2. Я попытался щелкнуть правой кнопкой мыши и нажать «Продолжить, когда в коде пользователя нет обработки»
    3. Я щелкнул значок -, чтобы удалить исключение из списка .

Ничто из этого не остановило Visual Studio от взлома при возникновении исключения.

Действительно странно то, что у меня есть другой проект, который также использует Response .Radirect и это нормально. Выдается исключение, поэтому я могу поймать его, если захочу, но если я его не поймаю, Visual Studio сохранит это и позволит перейти на следующую страницу. До сих пор я не нашел, что отличается между этими двумя проектами (они находятся в разных решениях, хотя, возможно, на этом уровне.)

1 Ответ

0 голосов
/ 25 февраля 2020

Response.Redirect отлично работает в том же проекте, когда мы находимся в WebForm, расширяющем System.Web.UI.Page.

Где он не работает, находится в Global.asax в Application_PostAcquireRequestState ( ) функция. У нас есть класс с именем MvcApplication, а не Global, но он все еще расширяет System.Web.HttpApplication.

Я не уверен, является ли это артефактом частичной реализации MVC или потому, что я делаю перенаправление на самой ранней части кода, я могу обнаружить, что сеанс существует, а не в страница.

У нас есть форма 1 MVC в проекте и мы используем метод перезаписи URL MVC (но большая часть проекта построена в WebForms.)

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

Response.Redirect(url, false);
System.Web.HttpContext.Current.ApplicationInstance.CompleteRequest();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...