Пользовательские данные Elmah YSOD - PullRequest
8 голосов
/ 02 марта 2010

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

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

Ответы [ 2 ]

4 голосов
/ 09 марта 2010

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

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

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

1 голос
/ 28 марта 2010

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

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