这是大图。我们在 IIS 6 中运行一个服务器,该服务器托管多个网站和应用程序,我们正在将整个事情移动到设置略有不同的不同数据中心。我们已经通知了我们的用户并更新了我们的 DNS 信息,这样理论上每个人都会从第一天起就愉快地访问新服务器,但我们知道有人不可避免地会掉入裂缝。
权力需要一个“监听器”页面/处理程序来接收对服务器的所有请求并将整个请求记录到一个文本文件中,包括(尤其是)POST 数据。
这就是我被困的地方。我不知道如何实现一个单一的处理程序来接收对服务器的所有请求。我依稀了解 IIS 6 重定向选项,但它们似乎都丢失了重定向上的 POST 数据。我也知道一点关于 IIS 6 的内置日志记录,但它也忽略了 POST 数据。
是否有一种简单的方法将所有请求路由到服务器,以便它们都命中一个处理程序,同时维护发布数据?
编辑:这是在 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 文件夹之外。
关于asp.net - 在 IIS 6/ASP.NET webforms 中记录服务器范围的请求数据(包括 POST 数据),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3865638/