7

我在 ASP.NET 中做一个电子商务解决方案,它使用PayPal 的网站支付标准服务。除此之外,我还使用他们提供的服务(支付数据传输),在用户完成付款后向您发送回订单信息。我需要做的最后一件事是解析来自他们的 POST 请求并将信息保存在其中。HTTP 请求的内容采用以下形式:

成功
first_name=Jane+Doe
last_name=Smith
payment_status=已完成
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 数据的正确方法是什么,而不是解析本身是如何完成的。

4

5 回答 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 文件的更多信息

于 2008-08-21T15:39:32.053 回答
3

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

于 2008-08-21T17:33:06.400 回答
2

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

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

于 2008-08-22T09:15:17.430 回答
1

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

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

于 2008-08-21T15:35:50.970 回答
0

如果我没看错你的问题,我认为你正在寻找Request 对象上的InputStream 属性。请记住,这是一条消防水带,因此您无法重置它。

于 2008-08-21T15:32:53.303 回答