una tener sólo servidor página puede informacion formularios form etiqueta enviar entre c# .net html html-form html-form-post

tener - enviar informacion entre formularios c#



Cómo enviar formulario http usando C# (6)

Aquí hay un script de muestra que utilicé recientemente en una transacción Gateway POST que recibe una respuesta GET. ¿Estás usando esto en un formulario personalizado de C #? Sea cual sea su propósito, simplemente reemplace los campos de Cadena (nombre de usuario, contraseña, etc.) con los parámetros de su formulario.

private String readHtmlPage(string url) { //setup some variables String username = "demo"; String password = "password"; String firstname = "John"; String lastname = "Smith"; //setup some variables end String result = ""; String strPost = "username="+username+"&password="+password+"&firstname="+firstname+"&lastname="+lastname; StreamWriter myWriter = null; HttpWebRequest objRequest = (HttpWebRequest)WebRequest.Create(url); objRequest.Method = "POST"; objRequest.ContentLength = strPost.Length; objRequest.ContentType = "application/x-www-form-urlencoded"; try { myWriter = new StreamWriter(objRequest.GetRequestStream()); myWriter.Write(strPost); } catch (Exception e) { return e.Message; } finally { myWriter.Close(); } HttpWebResponse objResponse = (HttpWebResponse)objRequest.GetResponse(); using (StreamReader sr = new StreamReader(objResponse.GetResponseStream()) ) { result = sr.ReadToEnd(); // Close and clean up the StreamReader sr.Close(); } return result; }

Tengo un archivo html simple como

<form action="http://www.someurl.com/page.php" method="POST"> <input type="text" name="test"><br/> <input type="submit" name="submit"> </form>

Editar: puede que no haya sido lo suficientemente claro con la pregunta

Quiero escribir el código C # que envía este formulario de la misma manera que ocurriría si hubiera pegado el html anterior en un archivo, lo abrí con IE y lo envié con el navegador.


Necesitaba tener un manejador de botones que creara una publicación de formulario en otra aplicación dentro del navegador del cliente. Llegué a esta pregunta, pero no vi una respuesta que se adaptara a mi situación. Esto es lo que se me ocurrió:

protected void Button1_Click(object sender, EventArgs e) { var formPostText = @"<html><body><div> <form method=""POST"" action=""OtherLogin.aspx"" name=""frm2Post""> <input type=""hidden"" name=""field1"" value=""" + TextBox1.Text + @""" /> <input type=""hidden"" name=""field2"" value=""" + TextBox2.Text + @""" /> </form></div><script type=""text/javascript"">document.frm2Post.submit();</script></body></html> "; Response.Write(formPostText); }


Puede usar la clase HttpWebRequest para hacerlo.

Ejemplo here :

using System; using System.Net; using System.Text; using System.IO; public class Test { // Specify the URL to receive the request. public static void Main (string[] args) { HttpWebRequest request = (HttpWebRequest)WebRequest.Create (args[0]); // Set some reasonable limits on resources used by this request request.MaximumAutomaticRedirections = 4; request.MaximumResponseHeadersLength = 4; // Set credentials to use for this request. request.Credentials = CredentialCache.DefaultCredentials; HttpWebResponse response = (HttpWebResponse)request.GetResponse (); Console.WriteLine ("Content length is {0}", response.ContentLength); Console.WriteLine ("Content type is {0}", response.ContentType); // Get the stream associated with the response. Stream receiveStream = response.GetResponseStream (); // Pipes the stream to a higher level stream reader with the required encoding format. StreamReader readStream = new StreamReader (receiveStream, Encoding.UTF8); Console.WriteLine ("Response stream received."); Console.WriteLine (readStream.ReadToEnd ()); response.Close (); readStream.Close (); } } /* The output from this example will vary depending on the value passed into Main but will be similar to the following: Content length is 1542 Content type is text/html; charset=utf-8 Response stream received. <html> ... </html> */


Su archivo HTML no va a interactuar directamente con C #, pero puede escribir C # para comportarse como si fuera el archivo HTML.

Por ejemplo: hay una clase llamada System.Net.WebClient con métodos simples:

using System.Net; using System.Collections.Specialized; ... using(WebClient client = new WebClient()) { NameValueCollection vals = new NameValueCollection(); vals.Add("test", "test string"); client.UploadValues("http://www.someurl.com/page.php", vals); }

Para obtener más documentación y características, consulte la página de MSDN.


Tuve un problema similar en MVC (lo que me llevó a este problema).

Recibo un FORMATO como respuesta de cadena desde una solicitud WebClient.UploadValues ​​(), que luego debo enviar, por lo que no puedo usar un segundo WebClient o HttpWebRequest. Esta solicitud devolvió la cadena.

using (WebClient client = new WebClient()) { byte[] response = client.UploadValues(urlToCall, "POST", new NameValueCollection() { { "test", "value123" } }); result = System.Text.Encoding.UTF8.GetString(response); }

Mi solución, que podría usarse para resolver el OP, es agregar un Javascript auto submit al final del código y luego usar @ Html.Raw () para representarlo en una página Razor.

result += "<script>self.document.forms[0].submit()</script>"; someModel.rawHTML = result; return View(someModel);

Código Razor:

@model SomeModel @{ Layout = null; } @Html.Raw(@Model.rawHTML)

Espero que esto pueda ayudar a cualquiera que se encuentre en la misma situación.


Response.Write("<script> try {this.submit();} catch(e){} </script>");