在IIS 6/ASP.NET webforms中记录服务器范围的请求数据(包括POST数据)

Joe*_*oel 7 asp.net post logging iis-6 http

这是大局.我们在IIS 6中运行一个托管多个网站和应用程序的服务器,我们正在将整个事物移动到不同的数据中心,设置略有不同.我们已经通知我们的用户并更新了我们的DNS信息,因此从理论上讲,每个人都会很乐意从第1天开始使用新服务器,但我们知道有人会不可避免地陷入困境.

想要"监听器"页面/处理程序的权力,它将接收对服务器的所有请求并将整个请求记录到文本文件中,包括(特别是)POST数据.

那就是我被困住的地方.我不知道如何实现一个将接收所有服务器请求的处理程序.我隐约了解IIS 6重定向选项,但它们似乎都丢失了重定向上的POST数据.我也对IIS 6的内置日志记录有所了解,但它也忽略了POST数据.

是否有一种简单的(ish)方法将所有请求路由到服务器,以便它们都能在保持后期数据的同时命中一个处理程序?

编辑:这是在WebForms,如果这很重要,但其他解决方案(如果小)绝对值得考虑.

Kev*_*Kev 10

如果所有请求都是POST到ASP.NET表单,那么您可以插入一个HttpModule来捕获并记录这些数据.

您不必重建所有应用程序来部署它.它只需要HttpModule放入每个应用程序的/bin文件夹并将其添加到文件的<httpModules>部分web.config.例如:

using System;
using System.Diagnostics;
using System.Web;

public class SimpleLogger : IHttpModule
{
  private HttpApplication _application;

  public void Dispose() { }

  public void Init(HttpApplication context)
  {
    _application = context;
    context.BeginRequest += new EventHandler(Context_BeginRequest);
  }

  void Context_BeginRequest(object sender, EventArgs e)
  {
    foreach (string key in _application.Request.Form.AllKeys)
    {
      // You can get everything on the Request object at this point
      // Output to debug but you'd write to a file or a database here.
      Debug.WriteLine(key + "=" + _application.Request.Form[key]);
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

在您的web.config文件中添加记录器:

<httpModules>
  <add name="MyLogger" type="SimpleLogger, SimpleLogger"/>
</httpModules>
Run Code Online (Sandbox Code Playgroud)

但要小心.如果您的网站捕获信用卡详细信息或其他敏感数据.您可能需要确保将其过滤掉或加密并远离不应该看到此信息的人员.

此外,如果您要登录文件,请确保日志文件位于任何面向公众的Web文件夹之外.