2011-04-20 10 views
10

Tengo que hacer un redireccionamiento y enviar a otra página el valor de las variables a y p. No puedo usar el método GET como: http://urlpage?a=1&p=2. Tengo que enviarlos con el método de publicación. ¿Cómo puedo enviarles sin usar un formulario de C#?¿Cómo puedo hacer un redireccionamiento con variables posteriores

+0

Asp.Net? Mvc? ¿Que estas usando? –

+0

estoy usando asp.net 4.0 –

+0

¿podría aceptar o escribir su respuesta? –

Respuesta

0

Usando WebClient.UploadString o WebClient.UploadData puede POSTAR datos al servidor fácilmente. Mostraré un ejemplo usando UploadData, ya que UploadString se usa de la misma manera que DownloadString.

byte[] bret = client.UploadData("http://www.website.com/post.php", "POST", 
      System.Text.Encoding.ASCII.GetBytes("field1=value1&field2=value2")); 

string sret = System.Text.Encoding.ASCII.GetString(bret); 

más: http://www.daveamenta.com/2008-05/c-webclient-usage/

+6

no es una redirección –

+0

Debe revisar su respuesta –

0

Este enlace se explica cómo hacer lo siguiente? http://msdn.microsoft.com/en-us/library/debx8sh9.aspx

using System.Net; 
... 
string HttpPost (string uri, string parameters) 
{ 
    // parameters: name1=value1&name2=value2 
    WebRequest webRequest = WebRequest.Create (uri); 
    //string ProxyString = 
    // System.Configuration.ConfigurationManager.AppSettings 
    // [GetConfigKey("proxy")]; 
    //webRequest.Proxy = new WebProxy (ProxyString, true); 
    //Commenting out above required change to App.Config 
    webRequest.ContentType = "application/x-www-form-urlencoded"; 
    webRequest.Method = "POST"; 
    byte[] bytes = Encoding.ASCII.GetBytes (parameters); 
    Stream os = null; 
    try 
    { // send the Post 
     webRequest.ContentLength = bytes.Length; //Count bytes to send 
     os = webRequest.GetRequestStream(); 
     os.Write (bytes, 0, bytes.Length);   //Send it 
    } 
    finally 
    { 
     if (os != null) 
     { 
     os.Close(); 
     } 
    } 

    try 
    { // get the response 
     WebResponse webResponse = webRequest.GetResponse(); 
     if (webResponse == null) 
     { return null; } 
     StreamReader sr = new StreamReader (webResponse.GetResponseStream()); 
     return sr.ReadToEnd().Trim(); 
    } 
    return null; 
} // end HttpPost 
[edit] 
+4

En una página web definitivamente ** no ** quiere un Messagebox.Show ... –

5

Esta clase envuelve la forma. Es un poco raro, pero funciona. Simplemente agregue los valores de la publicación a la clase y llame al método de publicación.

public class RemotePost 
{ 
    private Dictionary<string, string> Inputs = new Dictionary<string, string>(); 
    public string Url = ""; 
    public string Method = "post"; 
    public string FormName = "form1"; 
    public StringBuilder strPostString; 

    public void Add(string name, string value) 
    { 
     Inputs.Add(name, value); 
    } 
    public void generatePostString() 
    { 
     strPostString = new StringBuilder(); 

     strPostString.Append("<html><head>"); 
     strPostString.Append("</head><body onload=\"document.form1.submit();\">"); 
     strPostString.Append("<form name=\"form1\" method=\"post\" action=\"" + Url + "\" >"); 

     foreach (KeyValuePair<string, string> oPar in Inputs) 
      strPostString.Append(string.Format("<input name=\"{0}\" type=\"hidden\" value=\"{1}\">", oPar.Key, oPar.Value)); 

     strPostString.Append("</form>"); 
     strPostString.Append("</body></html>"); 
    } 
    public void Post() 
    { 
     System.Web.HttpContext.Current.Response.Clear(); 
     System.Web.HttpContext.Current.Response.Write(strPostString.ToString()); 
     System.Web.HttpContext.Current.Response.End(); 
    } 
} 
+0

Esto es bueno, pero debe 'HttpUtility.HtmlEncode' para escapar de los parámetros de su formulario al construir el HTML. – dana

+0

Esto resolvió mi problema. Gran solución :) – Kevin

Cuestiones relacionadas