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>");