我正在使用 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/