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

成功
名字=简+多伊
姓氏=史密斯
payment_status=已完成
payer_email=janedoesmith%40hotmail.com
付款总额=3.99
mc_currency=美元
定制=用于+购买+的+稀有+书+绿色+鸡蛋+%26+火腿

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

有帮助吗?

解决方案

像这样的东西放在你的 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 并避免页面模型开销(您不需要),但使用 Request.Form 来获取值,这样您就不必自己解析名称值对。假设您使用的是 PHP 或经典 ASP(或 ASP.NET MVC)。;)

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

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

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

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

如果我没理解你的问题,我想你正在寻找 输入流属性 在请求对象上。请记住,这是一个消防流,因此您无法重置它。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top