2009-12-14 75 views
8

我有一个小型的WPF应用程序(虽然我猜这是无关紧要,它是一个WPF表单还是一个网页表单应用程序?),我想要启动一个新的浏览器窗口并POST到一个特定的URL。我一直在瞎搞用:C#:打开浏览器并POST从一个Windows桌面应用程序的URL

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

启动窗口,但我不认为我可以使用相同的过程实际上张贴到网址...我也尝试了HttpWebRequest的,但我会就像用户在发布到这个URL后能够使用该应用程序一样,而不仅仅是向他们展示结果......我能看到什么能够做到这样的事情?

+0

为什么你有ASP.NET标记? – 2009-12-14 20:57:52

+0

啊,对不起,只是习惯把大部分时间放在那里,删除它。 – onekidney 2009-12-14 21:03:39

回答

3

有多种解决方案,不知道哪一个是最适合你的...

  1. 继续用原来的方法
  2. 在你的应用程序了
  3. 嵌入Web浏览器控件在其他的答案
  4. 建议
  5. 编程尽一切

对于#3你可能想看看这里的“幕后”:http://geekswithblogs.net/rakker/archive/2006/04/21/76044.aspx

如果你想要与#1一起工作 - 这是更棘手的,因为你需要控制外部应用程序,不同的浏览器会有不同的行为。

在处理一个“用户不友好”应用程序时,我使用“javascript:”协议和下面的代码作为默认浏览器。请注意,这不是“生产就绪”的代码。没有错误处理,用户可以切换焦点从启动的浏览器,或使用浏览器离开,不 “的javascript:” 协议支持等

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(); 
} 
  • URL1:http://www.google.com
  • URL2:的javascript:函数x() {document.all.q.value ='stackoverflow'; document.forms [0] .submit();} x();
+0

真棒,感谢所有的信息 - 我试着#1 .. 。 – onekidney 2009-12-15 20:56:17

10

没有直接的方法来做到这一点。你可以做的是生成一个HTML页面,其中包含一个表单,用于填写需要发布的数据,以及一些javascript在加载时自动发布页面。然后你只需在浏览器中打开网页...

生成的HTML可能看起来像:

<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> 

如果页面必须在应用程序中显示,加载在WebBrowser控制

+0

我最终使用这种方法。将HTML代码写入临时文件,然后使用文件上的'Process.Start()'在浏览器中打开它。 它比使用击键更健壮,它适用于用户默认选择的任何体面的浏览器。 – sanderd17 2016-09-14 08:14:17

5

改为使用WebBrowser Class

+3

http://msdn.microsoft.com/en-us/library/cc491275.aspx – 2009-12-14 21:05:55

+0

是的。这是如何:http://stackoverflow.com/questions/1705201/how-to-open-ie-with-post-info-in-csharp – urig 2010-01-06 10:40:11

3

您可以创建一个隐藏的WebBrowser控件并执行Navigate()(使用允许您指定请求方法的重载)。您需要指定一个“_blank”目标框架,以使导航在新的浏览器窗口中发生。

相关问题