自定义Elmah YSOD数据

8

我正在使用Elmah和ASP.NET,想知道如何添加自定义数据(例如会话变量)到未处理异常的电子邮件中。

我已经尝试了Global.asax文件中的几个处理程序,但似乎都不对。

2个回答

4
为此,我认为您需要修改Elmah source并重新编译。这应该不难实现。如果您查看Elmah.Error类的构造函数,将传递HttpContext,从中您应该能够获取所需的信息,例如Session,表单变量等。您可以为此数据向Elmah.Error类添加自定义字段。
我认为Elmah.ErrorMailHtmlFormatter类是构建电子邮件使用HtmlTextWriter的地方,在这里,您可以在RenderSummary()方法中插入代码以包括您添加到Elmah.Error的自定义字段。
我知道开始使用源可能会很麻烦,但我个人认为这是最清洁的方式,因为目前没有报告/电子邮件模板的设施,并且最好是在生成输出之后添加更改输出的东西。

1

Andrew的回答帮了很大的忙,谢谢。我最终做了以下几点:

  1. 在ErrorMail http模块中添加了一个OnBuilding事件。此事件的参数具有NameValueCollection属性。
  2. 我在global.asax中处理了OnBuilding事件。
  3. 由于HttpModules并不总是能够访问sessionstate,特别是如果异常发生在会话加载之前,因此我将要报告的数据复制到了HttpApplication缓存中(由sessionid索引)。
  4. 当异常发生时,我通过请求中存储的sessionid(具体来说,在cookie中)从应用程序缓存中获取所需的数据。我从这些数据生成一个NameValueCollection,并通过OnBuilding args将其发送回httpmodule。
  5. 然后将数据呈现为电子邮件,类似于呈现服务器变量部分的方式。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接