2009-12-14 103 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」目標框架,以使導航在新的瀏覽器窗口中發生。

相關問題