Question

Je réalise une solution de commerce électronique en ASP.NET qui utilise Norme de paiement sur le site Web de PayPal service.Parallèlement à cela, j'utilise un service qu'ils proposent (Transfert de données de paiement) qui vous envoie des informations sur les commandes en souffrance une fois qu'un utilisateur a effectué un paiement.La dernière chose que je dois faire est d'analyser la requête POST de leur part et de conserver les informations qu'elle contient.Le contenu de la requête HTTP se présente sous cette forme :

SUCCÈS
prénom=Jane+Doe
nom_de_Smith
payment_status=Terminé
payeur_email=janedoesmith%40hotmail.com
paiement_brut=3,99
mc_currency=USD
custom=Pour+l'achat+du+livre+rare+Oeufs+verts+%26+Jambon

Fondamentalement, je veux analyser ces informations et faire quelque chose de significatif, comme les envoyer par e-mail ou les enregistrer dans une base de données.Ma question est de savoir quelle est la bonne approche pour analyser les données HTTP brutes dans ASP.NET, et non comment l'analyse elle-même est effectuée.

Était-ce utile?

La solution

Quelque chose comme ça placé dans votre événement onload.

if (Request.RequestType == "POST")
{
    using (StreamReader sr = new StreamReader(Request.InputStream))
    {
        if (sr.ReadLine() == "SUCCESS")
        {
            /* Do your parsing here */
        }
    }
}

Gardez à l'esprit qu'ils pourraient souhaiter une sorte de réponse spéciale (c'est-à-dire :pas votre page Web complète), vous pouvez donc faire quelque chose comme ceci une fois l'analyse terminée.

Response.Clear();
Response.ContentType = "text/plain";
Response.Write("Thanks!");
Response.End();

Mise à jour:cela doit être fait dans un fichier de gestionnaire générique (.ashx) afin d'éviter une surcharge importante du modèle de page.Vérifier Cet article pour plus d'informations sur les fichiers .ashx

Autres conseils

Utilisez un IHttpHandler et évitez la surcharge du modèle Page (dont vous n'avez pas besoin), mais utilisez Request.Form pour obtenir les valeurs afin de ne pas avoir à analyser vous-même les paires nom-valeur.Faites simplement comme si vous étiez en PHP ou en ASP classique (ou en ASP.NET MVC, d'ailleurs).;)

Je recommande fortement d'enregistrer chaque demande dans un fichier.

De cette façon, vous pourrez toujours revenir au contenu réel plus tard.Vous pourrez me remercier plus tard, quand vous trouverez cet hostile-endian, codé en koi-8, [...], quoi que ce soit qui ait dérouté votre analyseur...

Eh bien, si les données entrantes sont dans un format POST codé sous forme standard, l'utilisation du tableau Request.Form vous donnera toutes les données d'une manière agréable à gérer.

Sinon, je ne vois aucun autre moyen que d'utiliser Request.InputStream.

Si je lis bien votre question, je pense que vous cherchez le Propriété InputStream sur l’objet Request.Gardez à l’esprit qu’il s’agit d’un flux Firehose, vous ne pouvez donc pas le réinitialiser.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top