lunes, 12 de noviembre de 2012

Enviar datos por el metodo post en C#


En este tutorial veremos como enviar datos por el método POST  en C#, en este caso crearemos una aplicación que lea un archivo xml y lo envíe a la pagina recive.aspx por el método POST. Luego lo que recibimos por este método lo guardamos en el objeto Application, para luego poder imprimirlo en la pagina recive.aspx.

Este es el código fuente comentado de la pagina default.aspx:

using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Net; using System.IO; using System.Text; namespace PostXML { public partial class WebForm1 : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { } public void PostXML(string fileName, string uri) { // Creamos un request usando una url que resibira el post. WebRequest request = WebRequest.Create(uri); // Seteamos la propiedad Method del request a POST. request.Method = "POST"; // Creamos lo que se va a enviar por el metodo POST y lo convertimos a byte array. string postData = this.GetTextFromXMLFile(fileName); byte[] byteArray = Encoding.UTF8.GetBytes(postData); // Seteamos el ContentType del WebRequest a xml. request.ContentType = "text/xml"; // Seteamos el ContentLength del WebRequest. request.ContentLength = byteArray.Length; // Obtenemos el request stream. Stream dataStream = request.GetRequestStream(); // escribimos la data en el request stream. dataStream.Write(byteArray, 0, byteArray.Length); // Cerramos el Stream object. dataStream.Close(); } private string GetTextFromXMLFile(string file) { StreamReader reader = new StreamReader(file); string ret = reader.ReadToEnd(); reader.Close(); return ret; } protected void boton1_Click(object sender, EventArgs e) { PostXML(Server.MapPath("~/test.xml"), "http://localhost:5261/recive.aspx"); } protected void boton2_Click(object sender, EventArgs e) { Response.Redirect("~/recive.aspx"); } } }


Y este es el codigo fuente del archivo recive.aspx

using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.IO; namespace PostXML { public partial class recive : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { Page.Response.ContentType = "text/xml"; // Read XML posted via HTTP StreamReader reader = new StreamReader(Page.Request.InputStream); String xmlData = reader.ReadToEnd(); //aqui podemos hacer lo que se nos ocurra con xmlData, por ejemplo //podemos parsear el codigo xml y guardarlo en una base de datos por ejemplo if (xmlData != "" && Request.Form.Count == 0) { Application["xml"] = xmlData; } } protected void show_Click(object sender, EventArgs e) { Label1.Text =HttpUtility.HtmlEncode(Application["xml"]==null? "" : Application["xml"].ToString()); } } }