|
HOT TIP #4 Глобальная обработка исключений в приложениях ASP.NET
|
|||
---|---|---|---|
#18+
Глобальная обработка исключений в приложениях ASP.NET ЯЗЫК: C# ВЕРСИИ ASP.NET: 1.0 | 1.1 АВТОР: Bipin Joshi, http://www.dotnetbips.com/ ПЕРЕВОД: hDrummer Проблема В ответ на ошибку времени выполнения приложения ASP.Net происходит возникновение исключения. Исключения предоставляют сотни преимуществ по отношению к модели обработки ошибок в классическом ASP. Например, ошибки являются объектами, есть возможность отлавливать ошибки в зависимости от их типа, присутствует лёгкость реализации структурированной обработки ошибок. Однако в каждом приложении присутствуют ситуации, когда исключения не отлавливаются и в результате приводят к выводу на экран уродливой страницы с сообщением об ошибке, принятой в ASP.NET по умолчанию (Я бы назвал её красно-коричневая чума – прим. переводчика). Отсюда возникает вопрос: каким образом сделать так, чтобы пользователь в любом случае видел вашу страницу с сообщением об ошибке, а не страницу, выводимую в случае возникновения исключения по умолчанию? Решение Всё это можно сделать, добавив пару строк кода в нужные места файла Global.asax. Если вы не знакомы с этим файлом, то знайте, что он содержит методы, обрабатывающие события уровня приложения и сессии. Например, такие, как старт приложения (Application_Start), начало пользовательской сессии (Session_Start), и некоторые другие. Объектом нашего внимания в этой статье будет метод Application_Error, выполняющийся в том случае, если исключение не проходит обработку в коде вашего приложения. Процесс обработки таких исключений выглядит таким образом: - создадим веб-форму с названием error.aspx, она и будет вашей страницей с сообщением об ошибке; - в Global.asax.cs отловим последнее возникшее исключение; - вызовем InnerException из исключения, пойманного выше. Это делается потому, что в случае возникновения необработанного исключения, .Net создаёт для него «обёртку» из нового исключения типа HttpUnhandledException; - поместим несколько значений в объект Session, для того, чтобы получить их на своей странице обработки ошибок; - обнулим ошибку на сервере; - перенаправим пользователя на свою страницу error.aspx. Код Global.asax.cs Следующий листинг демонстрирует код, необходимый для достижения вышесказанного: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33.
Наша страница Error.aspx Вот что мы должны сделать в нашей странице error.aspx: •Добавить на неё метку и назвать её lblMessage. •Собрать информацию об исключении, которая была помещена в объект Session в Global.asax.cs. •Очистить значения для текущей сессии. •Отобразить общее сообщение об ошибке пользователю. Можно даже добавить ссылку на страницу, вызвавшую ошибку. •Добавить конкретное сообщение об ошибке как HTML-комментарий для использования во время разработки. Этот код должен быть убран при сдаче приложения в эксплуатацию. В метод Page_Load файла error.aspx.cs, поместим следующее: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40.
Для проверки выше приведённого кода можно добавить в проект страницу и добавить следующую строку в метод Page_Load: Код: plaintext 1. 2. 3.
В результате выполнения этой страницы получим редирект на страницу с сообщением об ошибке и ссылкой на страницу-источник исключения. Вывод Плохо, когда пользователь в работе с приложением натыкается на ошибки, но ещё хуже, если пользователь видит непонятное сообщение об ошибке или уродливую страницу, выводимую по умолчанию. Используя приёмы, показанные в этой статье, вы сможете отобразить приличное сообщение на приличной странице, вне зависимости от того, какая ошибка произошла. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2003, 17:10 |
|
HOT TIP #4 Глобальная обработка исключений в приложениях ASP.NET
|
|||
---|---|---|---|
#18+
У нас примерно так и сделано -- Tygra's -- ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2003, 18:40 |
|
|
start [/forum/topic.php?fid=18&fpage=1042&tid=1396104]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
25ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
41ms |
get tp. blocked users: |
2ms |
others: | 243ms |
total: | 354ms |
0 / 0 |