1

我有一个客户,在测试期间,它给了我相互矛盾的信息。我不认为他们在撒谎,而是更加困惑。所以,我想在我的 ASP.Net 应用程序中设置一些简单的审计。具体来说,当任何页面被调用时,我想立即将查询字符串和/或表单 POST 数据插入日志表。只是原始值。

查询字符串很容易。但是似乎没有办法在不使用 BinaryRead 的情况下获取原始表单 POST 数据,如果我这样做了,那么我稍后会不再使用 Request.Form 集合。

有谁知道解决这个问题的方法?

编辑:tvanfosson 建议 Request.Params。我一直在寻找更容易使用的东西(比如 Request.Querystring,仅用于 POST),但我想我可以轻松地遍历所有参数并构建一个 name=value& 字符串等)。

4

3 回答 3

3

您可以创建一个自定义 HttpModule 来捕获对您的应用程序发出的所有请求,这样您就不需要触摸每个页面,并且您只能在测试期间使用它,以免降低生产中的性能。

一个示例实现将是:

public class CustomModule : IHttpModule 
{
    public void Init(HttpApplication context)
    {
        context.EndRequest += new EventHandler(context_BeginRequest);
    }

    private void context_BeginRequest(object sender, EventArgs e)
    {
        HttpContext context = ((HttpApplication)sender).Context;
        // you can use the context.Request here to send it to the database or a log file
    }
}

您需要将该模块添加到您的 web.config

<httpModules>
    <add name="CustomModule" type="CustomModule"/>
</httpModules>
于 2008-10-12T00:45:49.140 回答
2

所有表单数据都应该在Request.Params中。您需要在每个页面上执行此操作,或者可能使用 HttpModule。

[编辑] 如果您想单独使用Request.Form和 Request.QueryString获取表单参数

于 2008-10-11T22:54:54.293 回答
1

对于这种类型的场景,我建议实施 HttpHandler 或 HttpModule 。您可以从 Page_Load 事件中获取 POST 数据,但在此处实现此日志记录工具并不那么可维护。

于 2008-10-11T23:00:41.927 回答