处理原始HTTP请求内容

时间:2020-03-05 18:41:35  来源:igfitidea点击:

我正在ASP.NET中做一个电子商务解决方案,该解决方案使用PayPal的Website Payments Standard服务。我与他们一起使用他们提供的服务(付款数据传输),该服务在用户完成付款后向我们发送回订单信息。我需要做的最后一件事是解析来自他们的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

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

解决方案

回答

如果我没看错问题,我认为我们正在寻找Request对象的InputStream属性。请记住,这是一个流水流,因此我们无法重置它。

回答

好吧,如果传入的数据采用标准格式编码的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();

更新:应该在通用处理程序(.ashx)文件中完成此操作,以避免页面模型产生大量开销。查看本文以获取有关.ashx文件的更多信息

回答

使用IHttpHandler并避免Page模型的开销(我们不需要),但是使用Request.Form来获取值,因此我们不必自己解析名称值对。只是假装我们使用的是PHP或者Classic ASP(就此而言,就是ASP.NET MVC)。 ;)

回答

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

这样,我们以后总是可以返回到其实际内容。我们可以稍后再感谢我,当我们发现使用koi-8编码的敌对端序时,无论解析器是什么,它都被塞住了。