.Net Форма POST

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

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

Кто-нибудь знает способ обойти это?

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

На всякий случай метод GetValues ​​() в коллекции NameValueCollection (например, Request.Params или Request.Form) возвращает несколько элементов, если несколько параметров имеют одно и то же имя. (например, test.com/a.aspx?book=book1&book=book2

Samuel Kim 12.10.2008 15:45
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
1
842
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

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

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

Я согласен делать это на каждой странице, но я надеялся разделить то, что было передано через GET, и то, что было передано через POST (потому что вы можете делать и то и другое на странице, верно? Просто добавьте? Name = value & ... как действие формы POST?)

Matt Dawdy 12.10.2008 02:59

Request.Form должен содержать только параметры формы, и вы уже знаете, как получить строку запроса.

tvanfosson 12.10.2008 04:22

Да, Request.Form, о которой я знал. Я надеялся, что Request.Form красиво и аккуратно сложит их в строку. Но я могу перебрать весь Request.Form и самостоятельно построить строку, а затем просто использовать Querystring. Думаю, я просто ленился. Спасибо!

Matt Dawdy 12.10.2008 08:36

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

Я не уверен, что понимаю, как здесь могут помочь HttpHandler или HttpModule. Есть ли способ, используя их, чтобы я мог получить необработанные данные формы и не испортить объект запроса в процессе?

Matt Dawdy 12.10.2008 03:09

Вы можете создать собственный 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>

Другие вопросы по теме