Обработка необработанного содержимого HTTP-запроса

Я делаю решение для электронной коммерции в ASP.NET, которое использует службу Стандарт оплаты через веб-сайт PayPal. Вместе с этим я использую предлагаемую ими услугу (Передача платежных данных), которая отправляет вам обратно информацию о заказе после того, как пользователь завершил платеж. Последнее, что мне нужно сделать, это проанализировать полученный от них запрос POST и сохранить в нем информацию. Содержимое HTTP-запроса имеет следующий вид:

SUCCESS
first_name=Jane+Doe
last_name=Smith
payment_status=Completed
payer_email=janedoesmith%40hotmail.com
payment_gross=3.99
mc_currency=USD
custom=For+the+purchase+of+the+rare+book+Green+Eggs+%26+Ham

В основном я хочу проанализировать эту информацию и сделать что-то значимое, например, отправить ее по электронной почте или сохранить в БД. Мой вопрос в том, каков правильный подход к синтаксическому анализу необработанных HTTP-данных в ASP.NET, а не как выполняется сам синтаксический анализ.

Стоит ли изучать 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 называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
7
0
10 573
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Если я правильно понимаю ваш вопрос, я думаю, вы ищете InputStream свойство в объекте Request. Имейте в виду, что это поток пожарного шланга, поэтому вы не можете его сбросить.

Что ж, если входящие данные находятся в стандартном формате, закодированном в формате POST, то использование массива Request.Form предоставит вам все данные в удобной для обработки манере.

Если нет, то я не вижу другого выхода, кроме использования Request.InputStream.

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

Что-то вроде этого помещено в ваше событие onload.

if (Request.RequestType == "POST")
{
    using (StreamReader sr = new StreamReader(Request.InputStream))
    {
        if (sr.ReadLine() == "SUCCESS")
        {
            /* Do your parsing here */
        }
    }
}

Имейте в виду, что им может потребоваться какой-то особый ответ (т. Е. Не вся ваша веб-страница), поэтому вы можете сделать что-то подобное после того, как закончите синтаксический анализ.

Response.Clear();
Response.ContentType = "text/plain";
Response.Write("Thanks!");
Response.End();

Обновление: это должно быть сделано в файле Generic Handler (.ashx), чтобы избежать больших накладных расходов из-за модели страницы. Ознакомьтесь с Эта статья для получения дополнительной информации о файлах .ashx

Используйте IHttpHandler и избегайте накладных расходов модели страницы (которые вам не нужны), но используйте Request.Form для получения значений, чтобы вам не приходилось самостоятельно разбирать пары имя-значение. Просто представьте, что вы используете PHP или классический ASP (или ASP.NET MVC, если на то пошло). ;)

Я настоятельно рекомендую сохранять каждый запрос в какой-нибудь файл.

Таким образом, вы всегда можете вернуться к его фактическому содержанию позже. Вы можете поблагодарить меня позже, когда обнаружите этот враждебный порядок байтов в кодировке koi-8, [...], что бы это ни было, что поставило ваш парсер в тупик ...

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