Форум программистов, компьютерный форум, киберфорум
C#: Web, ASP.NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.74/19: Рейтинг темы: голосов - 19, средняя оценка - 4.74
0 / 0 / 0
Регистрация: 21.03.2009
Сообщений: 14

Как из global.asax передать Exception на собственную страницу обработки ошибок?

06.08.2009, 12:04. Показов 3601. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.
Имею код в global.asax.cs:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
protected void Application_Error(Object sender, EventArgs e) 
{ 
   try
   { 
      Exception lastError = Server.GetLastError(); 
      if (lastError != null) 
      { 
         //Записываем непосредственно исключение, вызвавшее данное, в 
         //Session для дальнейшего использования 
         Session["ErrorException"] = lastError.InnerException; 
      } 
   } 
   catch (Exception) 
   { 
      Response.Write("К сожалению произошла критическая ошибка. Нажмите кнопку ?Назад? в браузере и попробуйте ещё раз."); 
   } 
}
в error.aspx.cs:
C#
1
2
3
4
5
6
7
8
9
private void Page_Load(object sender, System.EventArgs e) 
{ 
   try 
   { 
      // возьмем информацию об исключении из сессии 
      Exception exc=(Exception)Session["ErrorException"]; 
      ... 
   } 
}
web.config:
XML
1
<customErrors mode="On" defaultRedirect="Problems.aspx"></customErrors>
Многие так советуют, и у меня все работает правильно. Если происходит ошибка выполняется метод protected void Application_Error(Object sender, EventArgs e) и в переменной Session["ErrorException"] с помощью lastError.InnerException сохраняется именно то что и необходимо, происходит перенаправление на старницу error.aspx, но по какой-то причине метод (Exception)Session["ErrorException"] всегда возвращает null. Что я не учел? Как передать объект Expection в error.aspx.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
06.08.2009, 12:04
Ответы с готовыми решениями:

Global.asax
Помогите, мне очень ужен этот темплейт а его у меня нет, дайте пожалуйста:sorry: Global Aplication Class (Global.asax)

Поправить Global.asax
Есть сайт на ASP.Net WebForms. Исходников нет, есть только то. что выложено на хостинг. Нужно поправить файл Global.asax - исправить 404...

Global.asax выдает ошибку
--Global.asax-- void Application_Start(object sender, EventArgs e) { // Code that runs on application startup ...

8
3 / 3 / 0
Регистрация: 04.03.2009
Сообщений: 33
19.08.2009, 19:05
Попробуй поставить точки прерывания в Global.asax в Application_Error и на ErrorPage.aspx в Page_Load. Мне кажется что сразу Page_Load происходит и в сессии ещё ничего нет, а только потом в сессию ложится ошибка.

Добавлено через 34 минуты 3 секунды
Цитата Сообщение от Bugai13 Посмотреть сообщение
Попробуй поставить точки прерывания в Global.asax в Application_Error и на ErrorPage.aspx в Page_Load. Мне кажется что сразу Page_Load происходит и в сессии ещё ничего нет, а только потом в сессию ложится ошибка.
Самому стало интересно, проверил не помогло. =(
0
0 / 0 / 0
Регистрация: 21.03.2009
Сообщений: 14
19.08.2009, 19:15  [ТС]
Да нет, последовательность событий правильная. Сдесь дело не в этом. Как оказалось автор той статьи которая прям сто раз перепечатаны в Инете тольи слаб в теории толи цели какие преследовал не понятно. Говорю так потому что в данной статье ну и в преведенном мной коде, пример с msdn показывающий как можно развит в сторону как делать не нужно.
Конкретно во всем я разобраться не смог, знаний к сжалению не хватает, но перед применением подобного приведенному мной коду ндо думать примерно в следующую сторону.
А конкретно объект Session доступен не всегда, а толко после возникникновения события AcquireRequestState. Исходя из этого имеем.
1. Предположим генерируется необработанное исключние 404(ресурс ненайден или не доступен) при выполнении кода метода Application_Error страници global.asax:
Session["ErrorException"] = "хоть что тут будет, без разници"; будет сгенерировано исключение.
2. (Как раз мой случай) Происходит ошибка в методе Page_Load страницы a.aspx при первой загрузке страницы, а может и при последующих(просто выеснять это опытным путем не стал, а знаний не хватает). Запускается метод Application_Error страници global.asax:
Session["ErrorException"] = "хоть что тут будет, без разници"; исключения сгенерировано не будет, но видать не все необходимые условия\события уже произошли и значения назначенные переменной Session будут доступны только в коде рассположеном на странице global.asax, а может и вообщ только в методе Application_Error, но точно не на старнице error.aspx или любой другой.
Очень хотелось бы, чтоб действительно знающий что-то(по этой теме всмысле) чел, осветил грамотно "подводные камни" для пытающихся обрабатывать исключения подобным мне способом.
0
3 / 3 / 0
Регистрация: 04.03.2009
Сообщений: 33
20.08.2009, 00:18
Завтра на работу пойду и посмотрю как енто у нас сделано. Да и умных ребят поспрошаю. Отпишуть, как станет известно =)
0
3 / 3 / 0
Регистрация: 04.03.2009
Сообщений: 33
02.09.2009, 00:29
Задержка большая вышла. Нужно всё ложить в куки ну и кодировать а потом на еррор пэйдже достовать. Если нужно могу пример кода сбросить.
0
Комбайнёр
 Аватар для MAcK
1606 / 704 / 77
Регистрация: 27.05.2008
Сообщений: 2,535
02.09.2009, 09:27
ждёмс
0
 Аватар для Грифин
8 / 8 / 3
Регистрация: 15.08.2009
Сообщений: 132
12.09.2009, 10:14
Можно поступить 3 способами. Это передавать через POST но минус в том что вы не сможете передавать большие ошибки, но так сделано в Dotnetnuke, второй записывать в файл, а потом считать и после считывания удалить, записывать в БД (то что я делаю, логирование) и на специальной странице показывать все ошибки.
0
11 / 11 / 1
Регистрация: 22.12.2012
Сообщений: 508
02.04.2017, 11:38
помогите плиз, Application_Error в Global.asax не срабатывает, что делать?
0
 Аватар для sau
2773 / 2073 / 386
Регистрация: 22.07.2011
Сообщений: 7,820
03.04.2017, 02:17
В конфигурации веб.сервера или конфиг.файле приложения настроить редиректы по коду ошибок , и ненужно велосипед изобретать.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
03.04.2017, 02:17
Помогаю со студенческими работами здесь

Global.asax и Session_OnStart, Session_OnEnd
Подскажите какие события объекта Session в ASP.NET соответствуют открытию и закрытию сеанса (обработчики событий распологаются в файле...

Выполнение метода файла Global.asax из страницы default.aspx.
Добрый день. Такой вопрос. У меня есть страница default.aspx и глобальный файл global.asax. Так вот, в глобальном файле есть класс ...

Как запустить private async Task SetInitialDataAsync сразу после запуска сайта из Global.asax ?
//запускается при попытке зарегистрироваться private async Task SetInitialDataAsync() { await...

Передача данных из Global.asax в контроллер
При старте приложения в Global.asax вычисляются данные и записываются в статическую переменную List&lt;int&gt; myvar protected void...

Не работает AJAX контроллер (без Global.asax), а с ним ошибки..
Приложение MVC 3. Необходимо разместить контроллер, который будет обрабатывать AJAX запросы. При наличии Global.asax сразу вылетает...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение Это мой обзор планшета X220 с точки зрения школьника. Недавно я решила попытаться уменьшить свой. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru