Как регистрировать отправленные POSTed формы? - PullRequest
0 голосов
/ 06 мая 2010

Назад в классические дни ASP, когда мне нужно было выписать пары имя / значение форм, отправленных POST, через этот цикл на страницу:

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

Он бросил все поля формы и значения в журнал так же, как GET. IIS7 .net дает мне лучший метод? (это для части проекта, посвященной разработке / тестированию, меня не беспокоит пространство или циклы, используемые для этого).

ТНХ

Ответы [ 2 ]

0 голосов
/ 06 мая 2010

Вы можете получить что-то вроде этого:

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());
}

Это грубый метод, и его не следует использовать в производственном коде. Однако, поскольку это только для разработки и тестирования, достаточно отслеживать, какие данные публикуются на вашей странице через строку запроса и форму.

0 голосов
/ 06 мая 2010

Вы можете создать модуль 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;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...