2009-12-14 41 views
8

Tôi có một ứng dụng WPF nhỏ (mặc dù tôi đoán nó không thực sự quan trọng cho dù đó là biểu mẫu wpf hoặc ứng dụng biểu mẫu web?) Mà tôi muốn có khởi chạy một cửa sổ trình duyệt mới và POST tới một url cụ thể. Tôi đã rối tung xung quanh với:C#: Mở trình duyệt và POST lên url từ ứng dụng dành cho máy tính để bàn cửa sổ

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

để khởi động cửa sổ nhưng tôi không nghĩ rằng tôi có thể sử dụng quá trình tương tự để thực sự gửi đến một url ... Tôi cũng đã thử nghiệm với HttpWebRequest nhưng tôi sẽ như người dùng có thể sử dụng ứng dụng sau khi tôi đã đăng lên url này, không chỉ hiển thị cho họ kết quả ... Tôi có thể xem điều gì để có thể làm điều gì đó như thế này?

+0

Tại sao bạn có thẻ ASP.NET? –

+0

ah, xin lỗi, chỉ được sử dụng để đặt ở đó hầu hết thời gian, xóa nó. – onekidney

Trả lời

3

Có nhiều giải pháp, không chắc chắn cái nào sẽ là tốt nhất cho bạn ...

  1. Tiến với cách tiếp cận ban đầu của bạn
  2. Nhúng điều khiển trình duyệt web trong Application của bạn như đề xuất trong câu trả lời khác
  3. làm tất cả mọi thứ theo chương trình "đằng sau những cảnh"

Đối với # 3 bạn có thể muốn xem ở đây: http://geekswithblogs.net/rakker/archive/2006/04/21/76044.aspx

Nếu bạn muốn đi với # 1 - nó phức tạp hơn, vì bạn cần phải kiểm soát ứng dụng bên ngoài và các trình duyệt khác nhau sẽ hoạt động khác nhau.

Tôi đã sử dụng giao thức "javascript:" và mã bên dưới với IE làm trình duyệt mặc định khi xử lý một ứng dụng "không thân thiện với người dùng". Xin lưu ý rằng đó không phải là mã "sẵn sàng sản xuất". Không có xử lý lỗi, người dùng có thể chuyển trọng tâm ra khỏi trình duyệt đưa ra, hoặc trình duyệt mà không cần sử dụng "javascript:" hỗ trợ giao thức, vv

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: function x() {document.all.q.value = 'stackoverflow'; document.forms [0] .submit();} x();
+0

Tuyệt vời, cảm ơn tất cả thông tin - Tôi đang cố gắng # 1 .. . – onekidney

10

Không có cách nào trực tiếp để thực hiện. Những gì bạn có thể làm là tạo một trang HTML với một biểu mẫu chứa đầy dữ liệu bạn cần đăng và một chút javascript để đăng trang tự động khi nó được tải. Sau đó, bạn chỉ cần mở trang đó trong trình duyệt ...

HTML được tạo có thể nhìn như thế:

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

Nếu trang phải được hiển thị trong ứng dụng của bạn, tải nó trong một WebBrowser kiểm soát

+0

Tôi đã sử dụng phương pháp này. Viết mã HTML vào một tệp tạm thời, và sau đó sử dụng 'Process.Start()' trên tệp để mở nó trong một trình duyệt. Nó mạnh mẽ hơn nhiều so với làm việc với tổ hợp phím, và nó hoạt động trên bất kỳ trình duyệt phong nha người dùng được chọn làm mặc định. – sanderd17

5

Thay vào đó, hãy sử dụng WebBrowser Class.

+3

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

+0

Đúng. Dưới đây là cách thực hiện: http://stackoverflow.com/questions/1705201/how-to-open-ie-with-post-info-in-csharp – urig

3

Bạn có thể tạo một điều khiển WebBrowser ẩn và làm Navigate() (sử dụng quá tải cho phép bạn chỉ định phương thức yêu cầu). Bạn sẽ cần chỉ định khung đích "_blank" để điều hướng xảy ra trong cửa sổ trình duyệt mới.

Các vấn đề liên quan