15
在ASP.NET MVC和IIS7中记录原始HTTP请求/响应
我正在编写一个Web服务(使用ASP.NET MVC),出于支持目的,我们希望能够以与原始在线格式(即包括HTTP)尽可能接近的方式记录请求和响应方法,路径,所有标头和正文)放入数据库。 我不确定如何以最少的“混杂”方式获取此数据。我可以通过检查HttpRequest对象的所有属性并从中构造一个字符串(并类似地用于响应)来重新构造我认为请求的外观,但我真的很想掌握实际的请求/响应数据电线上发送。 我很高兴使用任何拦截机制,例如过滤器,模块等,并且该解决方案可以特定于IIS7。但是,我宁愿仅将其保留在托管代码中。 有什么建议吗? 编辑:我注意到,HttpRequest有一种SaveAs方法可以将请求保存到磁盘,但是可以使用内部无法公开访问的内部帮助程序方法从内部状态重构请求(相当多的原因这不允许保存到用户提供的方法流,我不知道)。因此,开始看起来我必须尽力从对象中重建请求/响应文本……吟。 编辑2:请注意,我说了整个请求,包括方法,路径,标头等。当前响应仅查看不包含此信息的主体流。 编辑3:这里没有人阅读问题吗?到目前为止,有五个答案,但甚至没有人暗示一种获取整个原始在线请求的方法。是的,我知道我可以从请求对象中捕获输出流,标头,URL和所有其他内容。我已经在问题中说过,请参阅: 我可以通过检查HttpRequest对象的所有属性并从中构建一个字符串(以及类似的响应)来重新构造我认为的请求外观,但是我真的很想掌握实际的请求/响应数据是通过网络发送的。 如果您知道完全无法检索完整的原始数据(包括标题,URL,http方法等),那么这将很有用。同样,如果您知道如何以原始格式获取所有内容(是的,我仍然表示包括标头,url,http方法等),而无需重构(这就是我的要求),那么这将非常有用。但是告诉我可以从HttpRequest/ HttpResponse对象重建它没有用。我知道。我已经说过了 请注意:在任何人开始说这不是一个好主意,或将限制可伸缩性等之前,我们还将在分布式环境中实现限制,顺序交付和抗重播机制,因此无论如何都需要数据库日志记录。我不是在讨论关于这是否是一个好主意,我正在寻找如何做到这一点。