处理原始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编码的敌对端序时,无论解析器是什么,它都被塞住了。