one*_*ney 8 c# browser wpf post
我有一个小型的WPF应用程序(虽然我认为无论是wpf表单还是webform应用程序并不重要?)我想要启动一个新的浏览器窗口并POST到特定的URL.我一直在搞乱:
System.Diagnostics.Process.Start("http://myurl.com");
Run Code Online (Sandbox Code Playgroud)
启动窗口,但我不认为我可以使用相同的过程实际发布到网址...我也尝试过HttpWebRequest,但我希望用户能够在我发布到我之后使用该应用程序这个网址,不只是向他们展示结果......我能看到什么才能做到这样的事情?
Tho*_*que 11
没有直接的方法可以做到这一点.您可以做的是生成一个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>
Run Code Online (Sandbox Code Playgroud)
如果页面必须显示在您的应用程序中,请将其加载到WebBrowser
控件中
有多种解决方案,不确定哪一种最适合您......
对于#3,您可能需要查看这里:http://geekswithblogs.net/rakker/archive/2006/04/21/76044.aspx
如果你想选择#1 - 这会更棘手,因为你需要控制外部应用程序,并且不同的浏览器会有不同的行为。
在处理一个“用户不友好”的应用程序时,我使用了“javascript:”协议和下面的代码,并将 IE 作为默认浏览器。请注意,它不是“生产就绪”代码。没有错误处理,用户可能会将焦点从启动的浏览器上移开,或者使用不支持“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();
}
Run Code Online (Sandbox Code Playgroud)