我正在编写一个web服务(使用HTTP ),出于支持的目的,我们希望能够以尽可能接近原始的在线格式(即,包括ASP.NET方法、路径、所有头和主体)的方式将请求和响应记录到数据库中。
我不确定的是如何以最少的“损坏”的方式获得这些数据。我可以通过检查HttpRequest
对象的所有属性并根据它们构建一个字符串(对于响应也是如此)来重新构建我认为的请求的样子,但我真的希望获得在网络上发送的实际请求/响应数据。
我很乐意使用任何拦截机制,例如过滤器、模块等,并且解决方案可以针对IIS7。但是,我更喜欢将其仅保留在托管代码中。
有什么建议吗?
编辑:我注意到HttpRequest
有一个SaveAs
方法,可以将请求保存到磁盘,但它使用大量无法公开访问的内部助手方法从内部状态重建请求(这正是为什么不允许保存到用户提供的流的原因,我不知道)。因此,看起来我必须尽最大努力从对象重构请求/响应文本……叹息吧。
编辑2:请注意,我说的是整个请求,包括方法、路径、头部等。当前的响应仅查看不包含此信息的正文流。
编辑3:这里没人看问题吗?到目前为止,有五个答案,但没有一个甚至暗示有办法获得整个原始的在线请求。是的,我知道我可以从request对象中捕获输出流、头和URL以及所有这些东西。我已经在问题中说过了,请参阅:
我可以通过检查HttpRequest对象的所有属性并从它们构建一个字符串(对响应也是如此)来重新构造我认为的请求的样子,但我真的希望获得在网络上发送的实际请求/响应数据。
如果您知道完整的原始数据(包括报头、url、http方法等)只是无法检索,那么知道这一点将是有用的。同样,如果您知道如何以原始格式获取所有内容(是的,我的意思仍然是包括头文件、url、http方法等)。而不需要重建它,这就是我所问的,那么这将是非常有用的。但是告诉我我可以从HttpRequest
/HttpResponse
对象重构它是没有用的。我知道这个。我已经说过了。
请注意:在任何人开始说这是一个坏主意,或将限制可伸缩性等之前,我们还将在分布式环境中实现节流、顺序交付和防重放机制,因此无论如何都需要数据库日志。我不是在寻找关于这是否是一个好主意的讨论,我是在寻找如何才能做到这一点。
https://stackoverflow.com/questions/1038466
复制相似问题