В двух словах, если вы вручную устанавливаете статус HTTP в Application_Error, вы теряете возможность использовать обработчик раздела customErrors, так как вы вызываете Server.ClearError ().
Обработайте исключение перед Application_Error или извлеките исключение из HttpException.
- Как правильно преобразовать AnException в ответ HTTP 404?
Лучше обрабатывать исключения в контроллере. Вы можете ввести контроллер базового класса и обработать большинство исключений в пользовательском атрибуте HandleError. Вы можете выбросить HttpException, и он будет корректно обработан обработчиком раздела customErrors.
Вы также можете получить исключение ObjectNotFoundException из HttpException (404)
Application_Error - это последний шанс обработать исключение. У вас есть только Response API, чтобы справиться с этим. Вы можете вручную установить код состояния и записать в ответ или вручную инициировать перенаправление на пользовательскую страницу ошибки или вызвать Server.TransferRequest () для существующего файла HTML или aspx (не для действия контроллера). В текущей версии asp.net вы не можете установить или изменить Server.GetLastError в методе Application_Error, только получить или очистить его.
- Как работает раздел customErrors при обработке исключений в Application_Error?
Вызывая Server.ClearError (), вы также очищаете текущую ошибку запроса, поэтому она не обрабатывается обработчиком раздела customErrors
- Почему выбрасывание HttpException (404) отображает (пустую) страницу со статусом успеха (200)?
Вы не должны бросать никаких исключений в методе Application_Error. Исключение означает, что ваша обработка ошибок не удалась.