这是大图。我们在 IIS 6 中运行一个服务器,该服务器托管多个网站和应用程序,我们正在将整个事物移动到具有稍微不同设置的不同数据中心。我们已经通知了我们的用户并更新了我们的 DNS 信息,这样理论上每个人都会从第一天开始愉快地访问新服务器,但我们知道有人不可避免地会陷入困境。
需要“监听器”页面/处理程序的权力,该页面/处理程序将接收对服务器的所有请求并将整个请求记录到文本文件中,包括(尤其是)POST 数据。
这就是我被困的地方。我不知道如何实现一个处理程序来接收对服务器的所有请求。我模糊地了解 IIS 6 重定向选项,但它们似乎都丢失了重定向时的 POST 数据。我也对 IIS 6 的内置日志有一些了解,但它也忽略了 POST 数据。
是否有一种简单的(ish)方法将所有请求路由到服务器,以便它们都命中单个处理程序,同时维护发布数据?
编辑:这是在 WebForms 中,如果这很重要,但其他解决方案(如果小)绝对值得考虑。
最佳答案
如果所有请求都是 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]);
}
}
}
在您的
web.config
文件中添加记录器:<httpModules>
<add name="MyLogger" type="SimpleLogger, SimpleLogger"/>
</httpModules>
不过要小心。如果您的网站捕获信用卡详细信息或其他敏感数据。您可能需要确保将其过滤掉或将其加密并远离不需要查看此信息的人员。
此外,如果您要登录到文件,请确保日志文件位于任何面向公众的 Web 文件夹之外。