Полное руководство по обработке 500 ошибок в IIS6, IIS7, ASP.NET MVC3 с пользовательской страницей - PullRequest
2 голосов
/ 26 августа 2011

Я пытаюсь добавить страницу обработки ошибок 500 в мой проект ASP.NET MVC3.

Я хочу, чтобы моя пользовательская страница ошибок отображалась независимо от локального или удаленного доступа. Мой сайт работает на IIS6, IIS7 и IIS7.5 Express

Я хочу, чтобы он отображался, когда:

  • Исключение выдается в Application_BeginRequest
  • Исключение выдается в Application_Error
  • Исключение выдается в статическом конструкторе в проекте веб-сайта
  • Исключение выдается в контроллере
  • Исключение выдается в виде
  • Исключение, выбрасываемое в любом месте.

Я не смог этого сделать, фактически я вообще не смог отобразить какие-либо пользовательские страницы ошибок.

Моя страница ошибок находится в ~/Views/Shared/Error.aspx

Мой метод Application_Error в Global.asax.cs просто регистрирует выброшенное исключение.

Мой web.config имеет это:

<customErrors mode="On" defaultRedirect="~/Views/Shared/Error.aspx" redirectMode="ResponseRewrite">
</customErrors>
...
<system.webServer>
  <httpErrors errorMode="Custom" />
  ...
</system.webServer>

Что мне не хватает? Что мне нужно сделать, чтобы справиться с этими сценариями?

Ответы [ 2 ]

1 голос
/ 26 августа 2011

Для IIS 7+ вам не хватает только той части, которая определяет , которую httpErrors обрабатывает с помощью пользовательских обработчиков:

<configuration>
   <system.webServer>
      <httpErrors errorMode="Custom">
         <remove statusCode="500" />
         <error statusCode="500" path="~/Views/Shared/Error.aspx" />
       </httpErrors>
   </system.webServer>
</configuration>

(Тег <remove /> является необязательным, в зависимости от иерархии web.config.)

Для IIS 6 и ниже, вы должны установить это через IIS Manager, перейдя на соответствующую страницу свойств, вкладку Custom Errors, затем отредактируйте соответствующую строку HTTPError в «Тип сообщения:» «URL» и «URL:» "~ / Views / Shared / Error.aspx".

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

Лучший подход - выяснить, почему ваш BeginRequest генерирует исключение в первую очередь. Этого не должно быть. В Application_Error одной из альтернатив является использование GetBaseException, а затем просто перенаправление на пользовательскую страницу ошибки с информацией об исключении.

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