回到ASP经典日,当我需要写出POST提交的表格的名称/值对时,我通过这个循环进入页面:
on error resume next
for each x in Request.Form
Response.AppendToLog x & "=" & Request(x)
next
它将所有表单字段和值都放入日志中,就像GET一样。 IIS7 .net能给我更好的方法吗? (这是针对项目的开发/测试部分,我对用于实现此目的的空间或周期没有任何顾虑。)
THX
答案 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());
}
这是一种粗略的方法,但不应该在生产代码中使用。但是,因为这仅用于开发和测试,它应该足以通过查询字符串和表单跟踪发布到您页面的数据。