处理原始的HTTP请求内容

7
我正在使用ASP.NET进行电子商务解决方案,其中使用了PayPal的网站支付标准服务。除此之外,我还使用了他们提供的服务(Payment Data Transfer),该服务在用户完成付款后会将订单信息发送给您。我需要做的最后一件事是解析来自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

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

5个回答

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();

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


3
使用IHttpHandler可以避免Page模型的开销,而且使用Request.Form可以获取值,无需自行解析名称-值对。就像在PHP或Classic ASP(或者ASP.NET MVC)中一样。 ;)

2

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

这样,您可以随时返回到以后的实际内容。当您发现敌对端点,koi-8编码等问题使您的解析器出现问题时,您可以在以后感谢我...


1

如果传入的数据是标准的表单编码POST格式,那么使用Request.Form数组将以易于处理的方式提供所有数据。

如果不是这样,我看不到除了使用Request.InputStream之外的其他方法。


0
如果我理解你的问题正确,我认为你正在寻找请求对象上的InputStream属性。请记住,这是一个火箭流,所以您无法重置它。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接