Application_Error не запускается для 404 в MVC 3, когда url содержит 4 или более сегментов пути - PullRequest
3 голосов
/ 09 августа 2011

Я пытаюсь создать пользовательскую страницу ошибок для 404 ошибок. Я реализовал метод Application_Error в Global.asax.cs. По большей части это прекрасно работает, но метод не вызывается для URL с 4 или более сегментами пути.

Конкретный URL, с которым у меня возникают проблемы:

http://localhost/Area/Controller/Action/ID

Если я удалю ID, мой пользовательский возраст 404 загрузится нормально. Кажется, проблема в том, что у меня на пути 4 уровня (/ Area / Controller / Action / ID). Есть идеи?

Ответы [ 3 ]

12 голосов
/ 09 августа 2011

Я подозреваю, что ваши маршруты не учитывают URL из 4 частей.Попробуйте добавить в качестве последнего маршрута маршрут перехвата всех маршрутов , чтобы проверить это:

routes.MapRoute("Error404", "{*url}", new {controller = "Error", action = "PageNotFound" } );

Включение (некоторые из) ваших маршрутов в вопрос RouteConfig.cs также может помочь.

0 голосов
/ 09 августа 2011

Вместо этого вы получаете страницу с ошибкой IIS?Попробуйте это.

  1. Откройте IIS, выберите свой веб-сайт и выберите параметр «Страницы ошибок».
  2. Найдите код состояния 404, щелкните правой кнопкой мыши и перейдите к «Редактировать настройки функций».
  3. Теперь выберите «Страницы пользовательских ошибок» и измените «Тип пути» на URL «Выполнить URL»
  4. Наконец, введите свой URL-адрес как относительное значение, и теперь оно должно перенаправляться наэтот URL на 404 ошибки.
0 голосов
/ 09 августа 2011

Установка настраиваемой страницы ошибок для IIS. В IIS щелкните правой кнопкой мыши свой веб-сайт / виртуальный каталог -> свойства -> вкладка настраиваемых ошибок -> установите ошибку 404 для своей страницы ошибок.

Ваши настраиваемые ошибкибудет стрелять только для вещей, которые соответствуют вашим правилам маршрута.Как только все ваши правила маршрута не выполняются, и он не находит страницу по этому пути, он передает ошибку в IIS.Затем IIS использует свое правило 404 для объекта, который не был найден, поэтому вам нужно переопределить его и указать в своем проекте свой собственный 404.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...