Pregunta

Estoy creando una solución de comercio electrónico en ASP.NET que utiliza Estándar de pagos del sitio web de PayPal servicio.Junto con eso utilizo un servicio que ofrecen (Transferencia de datos de pago) que le envía información del pedido posterior después de que un usuario haya completado un pago.Lo último que debo hacer es analizar la solicitud POST de ellos y conservar la información que contiene.El contenido de la solicitud HTTP tiene este formato:

ÉXITO
primer_nombre=Jane+Doe
apellido=Smith
Payment_status=Completado
payer_email=janedoesmith%40hotmail.com
pago_bruto=3.99
mc_moneda=USD
personalizado=Para+la+compra+del+libro+raro+Huevos+verdes+%26+Jamón

Básicamente, quiero analizar esta información y hacer algo significativo, como enviarla por correo electrónico o guardarla en una base de datos.Mi pregunta es cuál es el enfoque correcto para analizar datos HTTP sin procesar en ASP.NET, no cómo se realiza el análisis en sí.

¿Fue útil?

Solución

Algo como esto colocado en su evento de carga.

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

Tenga en cuenta que es posible que deseen algún tipo de respuesta especial (es decir,no su página web completa), por lo que puede hacer algo como esto una vez que haya terminado de analizar.

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

Actualizar:Esto se debe hacer en un archivo de controlador genérico (.ashx) para evitar una gran sobrecarga del modelo de página.Verificar Este artículo para obtener más información sobre los archivos .ashx

Otros consejos

Utilice un IHttpHandler y evite la sobrecarga del modelo de página (que no necesita), pero use Request.Form para obtener los valores para que no tenga que analizar los pares de nombre y valor usted mismo.Simplemente finge que estás en PHP o ASP clásico (o ASP.NET MVC, para el caso).;)

Recomiendo encarecidamente guardar cada solicitud en algún archivo.

De esta manera, siempre podrás volver al contenido real más tarde.Puedes agradecerme más tarde, cuando encuentres ese endian hostil, codificado en koi-8, [...], lo que sea que haya dejado perplejo a tu analizador...

Bueno, si los datos entrantes están en un formato POST codificado en formato estándar, entonces usar la matriz Request.Form le proporcionará todos los datos de una manera agradable de manejar.

Si no, no veo otra forma que usar Request.InputStream.

Si estoy leyendo bien tu pregunta, creo que estás buscando el Propiedad de flujo de entrada en el objeto Solicitud.Tenga en cuenta que se trata de un chorro de manguera contra incendios, por lo que no puede restablecerlo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top