7

PayPal の Web Payments Standardサービスを使用する ASP.NET で e コマース ソリューションを実行しています。それとともに、ユーザーが支払いを完了した後に注文情報を返送するサービス ( Payment Data Transfer ) を使用しています。最後に行う必要があるのは、それらからの POST 要求を解析し、その中の情報を永続化することです。HTTP リクエストの内容は次の形式です。

SUCCESS
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

基本的に、この情報を解析して、電子メールで送信したり、DB に保存したりするなど、意味のあることをしたいと考えています。私の質問は、解析自体がどのように行われるかではなく、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 */
        }
    }
}

特別な種類の応答 (つまり、完全な Web ページではない) が必要な場合があることに注意してください。

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 またはクラシック 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 に答える