Сведения о вопросе

nikolya

05:43, 8th August, 2020

Теги

asp.net   http   e-commerce    

Обработать содержимое запроса raw HTTP

Просмотров: 383   Ответов: 5

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

SUCCESS
имя=Джейн+Мэ
фамилия=Smith
payment_status=завершено
payer_email=janedoesmith%40hotmail.com
payment_gross=3.99
mc_currency=USD
заказ=по+С+купить+в+о+редкая+книга+зеленый+яйца+%26+ветчина

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



  Сведения об ответе

DINO

19:27, 19th August, 2020

Что-то вроде этого помещается в вашем 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();

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


  Сведения об ответе

ASER

15:12, 24th August, 2020

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


  Сведения об ответе

lourence

21:06, 1st October, 2020

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

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


  Сведения об ответе

9090

14:23, 13th August, 2020

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

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


  Сведения об ответе

baggs

11:03, 18th August, 2020

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


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться