【发布时间】:2010-11-05 12:36:24
【问题描述】:
我正在编写一个 Web 服务(使用 ASP.NET MVC),出于支持目的,我们希望能够以尽可能接近原始的在线格式(即包括 HTTP 方法、路径、所有标头和正文)到数据库中。
我不确定如何以最不“损坏”的方式获取这些数据。我可以通过检查HttpRequest 对象的所有属性并从中构建一个字符串(对于响应也是如此)来重构我认为请求的样子,但我真的很想掌握实际的请求/通过网络发送的响应数据。
我很乐意使用任何拦截机制,例如过滤器、模块等,并且解决方案可以特定于 IIS7。但是,我更愿意将其仅保存在托管代码中。
有什么建议吗?
编辑:我注意到HttpRequest 有一个SaveAs 方法可以将请求保存到磁盘,但是这会使用大量内部辅助方法从内部状态重建请求公开访问(这就是为什么这不允许保存到我不知道的用户提供的流)。所以看起来我必须尽我所能从对象中重建请求/响应文本......呻吟。
编辑 2: 请注意,我说的是整个请求,包括方法、路径、标头等。当前响应仅查看不包含此内容的主体流信息。
编辑 3: 没有人在这里阅读问题吗?到目前为止,有五个答案,但没有一个甚至暗示了一种获取整个原始在线请求的方法。是的,我知道我可以从请求对象中捕获输出流、标头和 URL 以及所有这些内容。我已经在问题中说过,请参阅:
我可以通过检查 HttpRequest 对象的所有属性并从中构建一个字符串(对于响应也是如此)来重构我认为的请求的样子,但我真的很想掌握实际的请求/response 通过网络发送的数据。
如果您知道 完整 原始数据(包括标头、url、http 方法等)根本无法检索,那么知道这将很有用。同样,如果您知道如何以原始格式获取所有信息(是的,我的意思仍然是包括标头、url、http 方法等)而无需重建它,这就是我所要求的,那么这将非常有用。但是告诉我可以从HttpRequest/HttpResponse 对象中重建它是没有用的。我知道。我已经说过了。
请注意:在有人开始说这是一个坏主意或会限制可扩展性等之前,我们还将在分布式环境中实现节流、顺序传递和反重放机制,因此数据库无论如何都需要记录。我不是在寻找关于这是否是一个好主意的讨论,我在寻找如何做到这一点。
【问题讨论】:
-
@Kev - 不,它是使用 ASP.NET MVC 实现的 RESTful 服务
-
使用 IIS7 和本机模块可能是可行的 - msdn.microsoft.com/en-us/library/ms694280.aspx
-
你实现了吗?只是好奇,你有没有采取任何缓冲策略来写入db?
-
有趣的项目...如果你最终这样做了,有最终解决方案吗?
标签: asp.net-mvc logging request ihttpmodule