关于asp.net:处理原始HTTP请求内容

关于asp.net:处理原始HTTP请求内容

Process raw HTTP request content

我正在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数据的正确方法是什么,而不是解析本身是如何完成的。


这样的事情放在您的onload事件中。

1
2
3
4
5
6
7
8
9
10
if (Request.RequestType =="POST")
{
    using (StreamReader sr = new StreamReader(Request.InputStream))
    {
        if (sr.ReadLine() =="SUCCESS")
        {
            /* Do your parsing here */
        }
    }
}

请注意,他们可能想要某种特殊的响应(即,不是您的完整网页),因此在完成解析后,您可能会执行类似的操作。

1
2
3
4
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编码[...]成为解析器的任何障碍...


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

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


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


推荐阅读