У меня есть клиент, который во время тестирования дает мне противоречивую информацию. Я не думаю, что они лгут, но больше сбиты с толку. Итак, я хотел бы настроить простой аудит в моем приложении ASP.Net. В частности, прямо при вызове любой страницы я хочу немедленно вставить строку запроса и / или сформировать данные POST в таблицу журнала. Только сырые значения.
Строка запроса проста. Но, похоже, нет способа получить необработанные данные в форме POST без использования BinaryRead, и если я это сделаю, то позже я откажусь от использования коллекции Request.Form.
Кто-нибудь знает способ обойти это?
Обновлено: tvanfosson предложил Request.Params. Я искал что-то, что было бы проще в использовании (например, Request.Querystring, только для POST), но я думаю, я мог бы так же легко перебрать все параметры и построить строку name = value & и т. д.).





Все данные формы должны быть в Request.Params. Вам нужно будет делать это на каждой странице или, возможно, использовать HttpModule.
[EDIT] Если вы хотите получить параметры формы отдельно, используйте Форма запроса вместе с Request.QueryString
Я согласен делать это на каждой странице, но я надеялся разделить то, что было передано через GET, и то, что было передано через POST (потому что вы можете делать и то и другое на странице, верно? Просто добавьте? Name = value & ... как действие формы POST?)
Request.Form должен содержать только параметры формы, и вы уже знаете, как получить строку запроса.
Да, Request.Form, о которой я знал. Я надеялся, что Request.Form красиво и аккуратно сложит их в строку. Но я могу перебрать весь Request.Form и самостоятельно построить строку, а затем просто использовать Querystring. Думаю, я просто ленился. Спасибо!
Я бы рекомендовал реализовать HttpHandler или HttpModule для этого типа сценария. Вы можете получить данные POST из события Page_Load, но реализация этого средства ведения журнала здесь не так удобна в обслуживании.
Я не уверен, что понимаю, как здесь могут помочь HttpHandler или HttpModule. Есть ли способ, используя их, чтобы я мог получить необработанные данные формы и не испортить объект запроса в процессе?
Вы можете создать собственный 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>
На всякий случай метод GetValues () в коллекции NameValueCollection (например, Request.Params или Request.Form) возвращает несколько элементов, если несколько параметров имеют одно и то же имя. (например, test.com/a.aspx?book=book1&book=book2