2009-12-14 27 views
8

Tengo una pequeña aplicación WPF (aunque supongo que realmente no importa si se trata de un formulario wpf o una aplicación webform) que quiero tener lanzar una nueva ventana del navegador y POST a una url específica. He estado jugando con:C#: abra un navegador y publique en una url desde una aplicación de escritorio de Windows

System.Diagnostics.Process.Start("http://myurl.com"); 

para iniciar la ventana pero no creo que pueda utilizar el mismo proceso para publicar en realidad a una URL ... También he experimentado con HttpWebRequest pero me gustaría como el usuario para poder usar la aplicación después de haber publicado en esta url, no solo mostrarles los resultados ... ¿Qué puedo ver para poder hacer algo como esto?

+0

¿Por qué tiene la etiqueta ASP.NET? –

+0

ah, perdón, solo solía poner allí la mayor parte del tiempo, lo quité. – onekidney

Respuesta

3

Existen múltiples soluciones, no está seguro de cuál sería el mejor para usted ...

  1. continuar con su enfoque original
  2. Insertar el control del navegador web en su applicaiton como se sugiere en otras respuestas
  3. hacer todo mediante programación "detrás de la escena"

para # 3 que puede que desee ver aquí: http://geekswithblogs.net/rakker/archive/2006/04/21/76044.aspx

Si quiere ir con # 1 - es más complicado, ya que necesita controlar la aplicación externa y los diferentes navegadores se comportarían de manera diferente.

He utilizado el protocolo "javascript:" y el siguiente código con IE como navegador predeterminado cuando se trata de una aplicación "poco amigable para el usuario". Tenga en cuenta que no es un código "listo para producción". No hay ningún control de errores, el usuario puede desviar la atención desde el navegador puesto en marcha, o el navegador sin uso "javascript:" soporte de protocolo, etc.

static void Main() 
{ 
    Settings s = Settings.Default; 
    Process.Start(s.URL1); 
    Thread.Sleep(s.Delay1); 
    SendKeys.SendWait("%D"); 
    Thread.Sleep(100); 
    SendKeys.SendWait(EncodeForSendKey(s.URL2)); 
    SendKeys.SendWait("{ENTER}"); 
} 

public static string EncodeForSendKey(string value) 
{ 
    StringBuilder sb = new StringBuilder(value); 
    sb.Replace("{", "{{}"); 
    sb.Replace("}", "{}}"); 
    sb.Replace("{{{}}", "{{}"); 
    sb.Replace("[", "{[}"); 
    sb.Replace("]", "{]}"); 
    sb.Replace("(", "{(}"); 
    sb.Replace(")", "{)}"); 
    sb.Replace("+", "{+}"); 
    sb.Replace("^", "{^}"); 
    sb.Replace("%", "{%}"); 
    sb.Replace("~", "{~}"); 
    return sb.ToString(); 
} 
  • URL 1: http://www.google.com
  • URL2: javascript: función x() {document.all.q.value = 'stackoverflow'; document.forms [0] .submit();} x();
+0

Impresionante, gracias por toda la información. Estoy probando el n. ° 1. . – onekidney

10

No hay una manera directa de hacerlo. Lo que podría hacer es generar una página HTML con un formulario lleno de los datos que necesita para publicar, y un poco de javascript para publicar la página automáticamente cuando se carga. A continuación, sólo tiene que abrir esa página en el navegador ...

El HTML generado podría parecerse a lo siguiente:

<html> 
<head> 
<script language="Javascript"> 
function submitForm() { 
    var theForm = document.getElementById("theForm"); 
    theForm.submit(); 
} 
</script> 
</head> 
<body onload="submitForm()"> 
<form id="theForm" action="http://myurl.com" method="POST"> 
    <input type="text" name="username" value="myusername"/> 
    <input type="password" name="password" value="mypassword"/> 
</form> 
</body> 
</html> 

Si la página se debe mostrar en su aplicación, cargarlo en un control WebBrowser

+0

Terminé usando este enfoque. Escribir el código HTML en un archivo temporal y luego usar 'Process.Start()' en el archivo para abrirlo en un navegador. Es mucho más robusto que trabajar con las teclas, y funciona en cualquier navegador decente que el usuario haya seleccionado como predeterminado. – sanderd17

5

Use el WebBrowser Class en su lugar.

+3

http://msdn.microsoft.com/en-us/library/cc491275.aspx –

+0

Sí. He aquí cómo: http://stackoverflow.com/questions/1705201/how-to-open-ie-with-post-info-in-csharp – urig

3

Puede crear un control WebBrowser oculto y hacer Navigate() (utilizando la sobrecarga que le permite especificar el método de solicitud). Deberá especificar un marco de destino "_blank" para que la navegación se realice en una nueva ventana del navegador.

Cuestiones relacionadas