2008-10-11 3 views
1

У меня есть клиент, который во время тестирования дает мне противоречивую информацию. Я не думаю, что они лгут, но более смущены. Итак, я хотел бы настроить простой аудит в моем приложении ASP.Net. В частности, прямо, когда вызывается любая страница, я хочу немедленно вставить данные запроса и/или формы POST в таблицу журналов. Только сырые ценности..Net Form POST

Querystring легко. Но, похоже, нет способа получить исходные данные POST-типа без использования BinaryRead, и если я это сделаю, то позже я откажусь от использования коллекции Request.Form.

Кто-нибудь знает об этом?

EDIT: tvanfosson предложил Request.Params. Я искал что-то, что было проще в использовании (например, Request.Querystring, только для POST), но я думаю, я мог бы так же легко пропустить все параметры и построить строку name = value & и т. Д.).

+0

Только в случае, GetValues ​​() на NameValueCollection (например, запрос .Params или Request.Form) возвращает несколько элементов, если несколько параметров имеют одно и то же имя. (например, http://test.com/a.aspx?book=book1&book=book2 – 2008-10-12 11:45:10

ответ

2

Все данные формы должны быть в Request.Params. Вам нужно будет делать это на каждой странице, хотя или, возможно, использовать HttpModule.

[EDIT] Если вы хотите, чтобы получить параметры формы отдельно использовать Request.Form, наряду с Request.QueryString

+0

Я в порядке с этим на каждой странице, но я надеялся разделить то, что было передано через GET и что было передано через POST (потому что вы можете делать это как на странице, так и просто? Просто добавьте? name = value & ... как действие формы POST?) – 2008-10-11 22:59:05

+0

Request.Form должен содержать только параметры формы, и вы уже знаете, как получить строку запроса. – tvanfosson 2008-10-12 00:22:01

1

Я бы рекомендовал внедрение и HttpHandler или HttpModule для этого типа сценария. Вы можете добраться до POST-данных из события Page_Load, но реализация этого средства ведения журнала здесь не такая, которую можно сохранить.

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>