Обрабатывать необработанное содержимое HTTP-запроса

StackOverflow https://stackoverflow.com/questions/20245

  •  09-06-2019
  •  | 
  •  

Вопрос

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

УСПЕХ
first_name=Джейн+Доу
фамилия=Смит
payment_status=Завершен
payer_email=janedoesmith%40hotmail.com
payment_gross=3,99
mc_currency=доллар США
заказ=Для+покупки+++редкой+книги+Зеленые+Яйца+26%+Ветчина

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

Это было полезно?

Решение

Что-то вроде этого размещено в вашем событии 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();

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

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top