Tag: ihttpmodule

在ASP.NET MVC和IIS7中logging原始HTTP请求/响应

我正在编写一个Web服务(使用ASP.NET MVC),为了支持的目的,我们希望能够尽可能接近地logging请求和响应到原始的在线格式(即包括HTTP方法,path,所有标题和正文)到数据库中。 我不确定的是如何以最less的“错位”方式来获得这些数据。 我可以通过检查HttpRequest对象的所有属性并从它们构build一个string(以及类似的响应)来重新构成我认为请求看起来像的内容,但是我真的想要得到实际的请求/响应数据这是在电线上发送的。 我很高兴使用任何拦截机制,如filter,模块等,解决scheme可以特定于IIS7。 但是,我宁愿只保留在托pipe代码中。 任何build议? 编辑:我注意到, HttpRequest有一个SaveAs方法,可以将请求保存到磁盘,但这使用内部帮助器方法的负载重build内部状态的请求,不能公开访问(为什么这不允许保存到用户提供的stream我不知道)。 所以它开始看起来像我将尽我所能重build从对象的请求/响应文本…呻吟。 编辑2:请注意,我说的整个请求,包括方法,path,标题等。目前的反应只看在身体stream不包括这个信息。 编辑3:没有人在这里读问题吗? 目前为止有五个答案,但还没有人提供一个获得整个原始的在线请求的方法。 是的,我知道我可以从请求对象中捕获输出stream,头文件和URL以及所有这些东西。 我已经说过,在这个问题上,请看: 我可以通过检查HttpRequest对象的所有属性并从它们构build一个string(以及类似的响应)来重新构成我认为请求看起来像的内容,但是我真的想要得到实际的请求/响应数据这是在电线上发送的。 如果您知道完整的原始数据(包括标题,url,http方法等),则无法检索,那么知道这些数据就很有用。 同样的,如果你知道如何以原始格式(是的,我还是指包括头文件,url,http方法等等)来完成这个工作,而不需要重新构build它,那么这就是非常有用的。 但是告诉我,我可以从HttpRequest / HttpResponse对象重build它是没有用的。 我知道。 我已经说过了。 请注意:在任何人开始说这是一个坏主意之前,或者会限制可伸缩性等,我们也将在分布式环境中实现节stream,顺序传输和反重放机制,因此无论如何都需要数据库日志logging。 我不想讨论这是否是一个好主意,我正在寻找如何做到这一点。