Pasar datos por método POST a terceros

Bueno, un problema que se me presentó trabajando con Asp.net fue en un sitio que tenía que pasar por método POST ciertos datos a una página de pagos electrónicos.

La forma más práctica de pasar datos entre páginas aspx con el método POST es la que se detalla en esta página de forma sencilla:

NetCodigo.webinfo.es

Ahora, esto en el caso que yo describo no sirve, ya que no soy yo quien maneja los datos en la página destino, sino un tercero que espera que se los mande por POST.

Para solucionar esto escribí la siguiente clase, si alguno de ustedes se les presenta el mismo problema no tienen más que copiar/pegar el siguiente código (y después leerlo, obviamente jeje)


using System;
using System.Data;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;

/// <summary>
/// Esta clase genera los formularios para mandar por post los datos a otras páginas
/// </summary>
public class RemotePost
{
    System.Collections.Specialized.NameValueCollection _Inputs = new System.Collections.Specialized.NameValueCollection();
    string _Url = "";
    string _Method = "post";
    string _FormName = "form1";<

    /// <summary>
    /// Devuelve o setea la url del medio de pago
    /// </summary>
    public string Url
    {
        get {return _Url;}
        set {_Url = value;}
    }

    /// <summary>
    /// Agrega inputs hidden al formulario
    /// </summary>
    /// <param name="name"></param>
    /// <param name="value"></param>
    public void Add(string name, string value)
    {
        _Inputs.Add(name,value);
    }
  
    /// <summary>
    /// Imprime en el cliente el formulario de compra
    /// </summary>
    public void Post()
    {
        System.Web.HttpContext.Current.Response.Clear();
        System.Web.HttpContext.Current.Response.Write("");
        System.Web.HttpContext.Current.Response.Write(String.Format("< html >< head >< /head >< body onload="\" >", _FormName));
        System.Web.HttpContext.Current.Response.Write(String.Format("<center><form target="\" name="\" method="\" action="\">", _FormName, _Method, Url));

        for (int i = 0; i < _Inputs.Keys.Count; i++)
        {
            System.Web.HttpContext.Current.Response.Write(String.Format("<input name="\" type="\" value="\">", _Inputs.Keys[i], _Inputs[_Inputs.Keys[i]]));
        }
        System.Web.HttpContext.Current.Response.Write("</form></center></body></html>")
    }
}



Bien, ¿y cómo se usa esto?

protected void Button1_Click(object sender, EventArgs e)
{
RemotePost myremotepost = new RemotePost();
myremotepost.Url = "URL DE DESTINO";
myremotepost.Add("NombreItem", "ValorItem");
myremotepost.Add("NombreItem2", "ValorItem2");
myremotepost.Add("NombreIntem3", "ValorItem3");
myremotepost.Post();
}


Espero que esto les pueda servir! Cualquier duda consulten!

Espero sus comentarios!

Saludos!

7 comentarios:

martin dijo...

genial
esto me viene bien para usarlo con mercadopago
gracias

Wally... dijo...

muy bueno...

ahora lo veo bn pero esta interesante...

vos siempre poniendo cosas útiles... saludos!!!

javier dijo...

Muy bueno che
siempre vienen bien estas cosas :D

Anónimo dijo...

muy buenos tu aportes, realmente muy interesantes. Gracias

Anónimo dijo...

Hola Marcos,
He visto tu código y me esta resultando muy útil e interesante.
Solo tengo una pequeña duda.
Si quiero que un item a pasar sea un "FileUpload" como le indico el valor del Item para que me coja el archivo seleccionado??.
Muchas Gracias. Saludos.
Alberto

Anónimo dijo...

Hola Marcos el codigo al copiarlo me manda error en el html


estoy utilizando visual web developer 2010 express

Anónimo dijo...

Estimado, me presenta error en "HTML | HEAD | /HEAD | <...", alguna idea.
slds

Publicar un comentario