Как сделать страницу catch all error, если что-то взорвется в моем приложении MVC3?
В настоящее время у меня есть моя сеть.настройка файла конфигурации, чтобы не показывать отладочную информацию. Когда возникает ошибка и что-то идет не так, эта страница отображается для моих пользователей:
Извините, произошла ошибка при обработке вашего запроса.
Это страница ошибок по умолчанию.
Как я могу перенаправить на пользовательский вид, если все идет наперекосяк в любом месте в любое время на моем сайте?
1 ответ:
Обработка ошибок может быть грязной. Хотя редактирование страниц ошибок по умолчанию помогает, есть некоторые детали, которые вы должны знать.
По существу, существует два типа ошибок: Ошибка в управляемом коде, которую можно каким-то образом "поймать" с помощью кода. Во-вторых, существуют ошибки IIS, которые никогда не попадают в управляемый код, потому что связанный обработчик никогда не вызывался. Например, запрос, который не сопоставляет никакие маршруты, не вызовет никакого кода, потому что IIS предполагает, что статический ресурс был запрошенный.Я предлагаю эти три шага, чтобы сделать обработку ошибок немного более удобной
Не перенаправляйте! перенаправление на ошибку нарушает HTTP. Вместо этого вы должны просто вернуть страницу на место, используя
Server.Transfer
илиreturn View("...")
, или записав непосредственно в поток ответов, в зависимости от того, где обрабатывается ошибка. Ключевой момент: URL не должен меняться. Смотрите, например http://www.google.com/asdf/asdfДобавление и регистрация глобального фильтра это наследует
HandleErrorAttribute
и реализует вашу процедуру обработки ошибок (и ведения журнала). Вы можете сделать это умным, чтобы он возвращал HTML для запросов HTML и JSON для запросов JSON и т. д.Настройте удаление обработчиков ошибок IIS по умолчанию, чтобы убедиться, что все ошибки идут в одно и то же место назначения, если это то, что вы хотите. Это предотвращает появление уродливых страниц ошибок IIS по умолчанию. Это можно сделать в диспетчере IIS или в
web.config
.