Пользовательские данные Elmah ysod
Вопрос
Я использую Elmah с ASP.NET и задаюсь вопросом, как я бы добавил пользовательские данные, такие как переменная сеанса, к нечеткому электронной почте исключения.
Я пробовал несколько обработчиков в файле Global.asax, но, кажется, не могу найти правильный.
Решение
Для этого я подумал, что вам нужно изменить Elmah источник и перекомпилировать. Это не должно быть слишком сложно достичь. Если вы посмотрите на конструктор Elmah.Error
класс, HttpContext
передается, из которого вы должны иметь возможность получить необходимую вам информацию, например, сеанс, переменные формы и т. Д. Вы можете добавить пользовательские поля в Elmah.Error
класс для этих данных
я думаю Elmah.ErrorMailHtmlFormatter
класс - это то, где электронное письмо построено с использованием HtmlTextWriter
, и здесь вы можете вставить код в RenderSummary()
Метод включения пользовательских полей, которые вы добавили в Elmah.Error
.
Я знаю, что это может быть боль, чтобы начать работать с источником, но лично я думаю, что это самый чистый способ, так как в настоящее время нет никаких средств для шаблонов отчетов/электронной почты, и лучше, чтобы набрать что -то, чтобы изменить результат после его сгенерирования.
Другие советы
Ответ Эндрю очень помог, спасибо. Я закончил тем, что сделал следующее:
- Добавлено событие он настройки в модуль HTTP Errorrormail. Событие Args для этого события имеет свойство namevalueCollection.
- Я справился с мероприятием по строительству в Global.asax.
- Поскольку httpmodules не всегда имеет доступ к SessionState, esp. Если исключение происходит до загрузки сеанса, я скопировал данные, которые я хотел, сообщил в кэше HTTPApplication (индексированное SessionID).
- Когда происходит исключение, я получаю данные, которые я хочу, от кэша приложения, через сеанс, хранящийся в запросе (в частности, в файле cookie). Я генерирую namevalueCollection из этих данных и отправляю его обратно в HTTPModule через ARGS -строительство.
- Затем данные отображаются на электронную почту аналогично тому, как отображается раздел переменных сервера.