Обработка необработанного содержимого HTTP-запроса - PullRequest
7 голосов
/ 21 августа 2008

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

УДАЧИ
first_name = Jane Doe +
last_name = Smith
payment_status = завершено
payer_email = janedoesmith% 40hotmail.com
payment_gross = 3,99
mc_currency = USD
заказ = Для + плюсовой покупки + в + с + редкую + книга + зеленый + яйца +% 26 + Ham

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

Ответы [ 5 ]

14 голосов
/ 21 августа 2008

Нечто подобное помещено в событие 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

3 голосов
/ 21 августа 2008

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

2 голосов
/ 22 августа 2008

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

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

1 голос
/ 21 августа 2008

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

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

0 голосов
/ 21 августа 2008

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...