我正在使用 Elmah 来记录异常。如果请求是基于表单的请求(即 Content-Type:application/x-www-form-urlencoded),则 Elmah 非常擅长记录请求主体,但对于基于 JSON 的请求,其中内容类型为 application/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 仅记录请求外围的上下文或信息,并且可以通过标准方式方便地捕获这些上下文或信息。表单可以说是一种特殊处理,因为 ASP.NET 已经完成了解码和记忆当 MIME 类型为时请求实体application/x-www-form-urlencoded
。另一方面,JSON 请求是有问题的,因为在发生异常时,输入流 (HttpRequest.InputStream http://msdn.microsoft.com/en-us/library/system.web.httprequest.inputstream.aspx) 可能已部分或全部被 JSON 解码器消耗。 ELMAH 无法出于伐木目的对其进行第二次破解。因此,您必须确保在将输入流或文本传递给任何 JSON 解码器之前对其进行缓冲,并将其存储在类似的地方HttpContext.Items http://msdn.microsoft.com/en-us/library/system.web.httpcontext.items.aspx。然后您可以尝试恢复缓冲的数据并发生错误时将其附加到外发邮件中 http://scottonwriting.net/sowblog/archive/2011/01/06/customizing-elmah-s-error-emails.aspx。 ELMAH 当前不支持将任意数据附加到记录的错误。然而有ErrorLogModule
有一个Logged
事件并提供所记录错误的 ID。这可用于将输入数据存储在其他地方(如果您使用后端数据库来存储错误日志,则可能存储在另一个表中),但通过 Id 维护关联将其与记录的错误联系起来。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)