Пользовательские данные Elmah YSOD

Я использую Elmah с ASP.NET и задаюсь вопросом, как я добавил бы пользовательские данные, такие как переменная сеанса, на электронное письмо необработанного исключения.

Я попробовал несколько обработчиков в файле Global.asax, но, может казаться, не нахожу правильный.

8
задан Dana Benson 2 March 2010 в 17:20
поделиться

2 ответа

Для этого, я думаю, вам нужно изменить исходный код Elmah и перекомпилировать. Это не должно быть слишком сложно. Если вы посмотрите в конструктор класса Elmah.Error , передается HttpContext , из которого вы сможете получить необходимую информацию, например Сессия, переменные формы и т. Д. Вы можете добавить настраиваемые поля в класс Elmah.Error для этих данных

Я думаю, что ​​Elmah.В классе ErrorMailHtmlFormatter письмо создается с использованием HtmlTextWriter , и здесь вы можете вставить код в метод RenderSummary () , чтобы включить настраиваемые поля, которые вы добавили в Elmah.Error .

Я знаю, что начинать работу с исходным кодом может быть непросто, но лично я считаю, что это самый чистый способ, так как в настоящее время нет средств для шаблонов отчетов / сообщений электронной почты, и лучше, чтобы что-то изменилось, чтобы изменить вывод после того, как он был сгенерирован.

4
ответ дан 5 December 2019 в 23:14
поделиться

Ответ Эндрю очень помог, спасибо. В итоге я сделал следующее:

  1. Добавил событие OnBuilding в http-модуль ErrorMail. Аргументы этого события имеют свойство NameValueCollection.
  2. Я обработал событие OnBuilding в global.asax.
  3. Поскольку HttpModules не всегда имеют доступ к состоянию сеанса, особенно. если исключение возникает до загрузки сеанса, я скопировал данные, которые я хотел сообщить, в кеш HttpApplication (проиндексированный по идентификатору сеанса).
  4. Когда возникает исключение, я беру данные, которые мне нужны, из кеша приложения с помощью идентификатора сеанса, хранящегося в запросе (в частности, в файле cookie). Я генерирую NameValueCollection из этих данных и отправляю его обратно в httpmodule через аргументы OnBuilding.
  5. Затем данные отправляются по электронной почте аналогично тому, как отображается раздел переменных сервера.
1
ответ дан 5 December 2019 в 23:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: