如何记录POST表单提交?

时间:2010-05-05 22:36:52

标签: asp.net iis-7

回到ASP经典日,当我需要写出POST提交的表格的名称/值对时,我通过这个循环进入页面:

on error resume next
for each x in Request.Form
 Response.AppendToLog x & "=" &  Request(x)
next

它将所有表单字段和值都放入日志中,就像GET一样。 IIS7 .net能给我更好的方法吗? (这是针对项目的开发/测试部分,我对用于实现此目的的空间或周期没有任何顾虑。)

THX

2 个答案:

答案 0 :(得分:0)

您可以创建一个http模块来记录所有帖子。它允许您在页面外部记录,单点记录而不必将逻辑添加到您要记录活动的所有页面。

这里有一些代码。你必须避免记录viewstate,因为有大量无用的信息。所以你必须添加一些逻辑来实现这一点。

public class ActivityLogModule: IHttpModule
{
    public void Init(HttpApplication application)
    {
        application.EndRequest += (new EventHandler(this.Application_EndRequest));
    }

    private void Application_EndRequest(Object source, EventArgs e)
    {
        HttpApplication application = (HttpApplication)source;
        HttpContext context = application.Context;

        if (RecordActivity(context))
        {
            ActivityLogger.Instance.Log(application.Context.User.Identity.Name, 
                 application.Context.Request.Url.AbsoluteUri, 
                 application.Context.Request.Form.ToString());
        }
    }

    public void Dispose(){}

    protected bool RecordActivity(HttpContext context)
    {
        if (!context.Request.RequestType.Equals("POST"))
        {
            return false;
        }

        return true;
    }
}

答案 1 :(得分:0)

你可以这样:

protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
       LogPostValues();
}

private void LogPostValues()
{
    string logPath = @"C:\PostedValuesLog.txt";

    StringBuilder sb = new StringBuilder();

    sb.AppendFormat("Logging: {0}", Request.Path);

    sb.Append("Form Values");
    foreach (string key in Request.Form)
    {
            string val = Request.Form[key];
            sb.AppendFormat("{0} = {1}<br/>", key, val);
    }

    sb.Append(Environment.NewLine);
    sb.Append("QueryString Values");

    foreach (string key in Request.QueryString)
    {
            string val = Request.QueryString[key];
            sb.AppendFormat("{0} = {1}<br/>", key, val);
    }

    sb.Append(Environment.NewLine);
    sb.Append(Environment.NewLine);
    sb.Append(Environment.NewLine);

    File.AppendAllText(logPath, sb.ToString());
}

这是一种粗略的方法,但不应该在生产代码中使用。但是,因为这仅用于开发和测试,它应该足以通过查询字符串和表单跟踪发布到您页面的数据。