处理原始HTTP请求内容

时间:2008-08-21 15:30:28

标签: asp.net http e-commerce

我在ASP.NET中使用PayPal's Website Payments Standard服务进行电子商务解决方案。与此同时,我使用他们提供的服务(Payment Data Transfer),在用户完成付款后向您发送订单信息。我需要做的最后一件事就是从他们解析POST请求并将信息保存在其中。 HTTP请求的内容采用以下形式:

  

SUCCESS
  如first_name =简+ Doe的
  姓氏=史密斯
  PAYMENT_STATUS =完成
  PAYER_EMAIL = janedoesmith%40hotmail.com
  payment_gross = 3.99
  mc_currency = USD
  定制=供+的+购买+ + +的稀有+书+绿色+鸡蛋+%26 +火腿

基本上我想解析这些信息并做一些有意义的事情,比如通过电子邮件发送或将其保存在数据库中。我的问题是在ASP.NET中解析原始HTTP数据的正确方法是什么,而不是解析本身是如何完成的。

5 个答案:

答案 0 :(得分:14)

这样的东西会放在你的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文件的详细信息,请查看this article

答案 1 :(得分:3)

使用IHttpHandler并避免使用Page模型开销(您不需要),但使用Request.Form获取值,这样您就不必自己解析名称值对。只是假装你是PHP或经典ASP(或ASP.NET MVC,就此而言)。 ;)

答案 2 :(得分:2)

我强烈建议将每个请求保存到某个文件中。

这样,您可以随时返回到它的实际内容。你可以稍后感谢我,当你发现敌对端,koi-8编码,[...],无论是什么都难以解决你的解析器......

答案 3 :(得分:1)

如果传入的数据采用标准格式编码的POST格式,那么使用Request.Form数组将以一种很好的处理方式为您提供所有数据。

如果没有,那么除了使用Request.InputStream之外,我看不到任何其他方法。

答案 4 :(得分:0)

如果我正确地阅读您的问题,我认为您正在寻找Request对象上的InputStream property。请记住,这是一个firehose流,因此您无法重置它。