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