c# - Elmah:如何从错误报告中获取 JSON HTTP 请求正文

标签 c# .net elmah error-logging exception-logging

我正在使用 Elmah 记录异常。如果请求是基于表单的请求(即 Content-Type:application/x-www-form-urlencoded),Elmah 非常擅长记录请求主体,但是对于内容类型为 application/json 的基于 JSON 的请求,请求主体在错误报告中无处可寻。任何人都知道我在哪里可以找到这个请求主体,以便我可以正确诊断我的异常?

更新:2012-01-03

为了澄清我所说的基于 JSON 的请求的含义,下面是一个以 JSON 作为请求主体的原始 HTTP 请求示例:

PUT http://mycompany.com/api/v1.0/me HTTP/1.1
Host: mycompany.com
Content-Length: 20
Content-Type: application/json

{"city":"Vancouver"}

最佳答案

到目前为止,ELMAH 仅记录请求外围的上下文或信息,并且可以通过标准方式方便地捕获这些信息。表单可以说是一种特殊处理,因为当 MIME 类型为 application/x-www-form-urlencoded 时,ASP.NET 已经完成了解码和内存请求实体的工作。另一方面,JSON 请求是有问题的,因为在发生异常时,输入流 ( HttpRequest.InputStream ) 可能已部分或全部被 JSON 解码器消耗。 ELMAH 将无法出于记录的目的对其进行第二次破解。因此,您必须确保在通过任何 JSON 解码器传递输入流或文本之前缓冲输入流或文本,并将其存储在像 HttpContext.Items 这样的地方。 .然后您可以尝试恢复缓冲数据和 attach it to an outgoing mail at the time of an error . ELMAH 当前不支持将任意数据附加到记录的错误。但是,ErrorLogModule 有一个 Logged 事件,它提供记录错误的 ID。这可用于将输入数据存储在其他地方(如果您使用后端数据库存储错误日志,则可能在另一个表中)但通过 Id 维护关联将其与记录的错误联系起来。

关于c# - Elmah:如何从错误报告中获取 JSON HTTP 请求正文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8686466/

相关文章:

c# - 如何读取日志文件的最后 "n"行

asp.net - 使用 ELMAH 记录 WCF 服务的异常

c# - 通过 wcf 将大文件流式传输到 azure 失败

c# - 使用协程加载网格 - 等到完成,

c# - 设置 Screen.WorkingArea.Width?

elmah - HttpTaskAsyncHandler 和 HTTP 上下文

asp.net-mvc - ELMAH 中未记录的错误

c# - c#打开串口报错

c# - 不能调用抽象成员

c# - 在 .Net 中锁定 - 是引用锁定还是对象锁定?