Я делаю решение для электронной коммерции в 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, а не как выполняется сам синтаксический анализ.





Если я правильно понимаю ваш вопрос, я думаю, вы ищете 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, [...], что бы это ни было, что поставило ваш парсер в тупик ...