2012-04-10 98 views
5

我相信这一定是以前回答,但我找不到解决方案,所以我想我可能误解其他人的解决方案或试图做一些愚蠢的事情,但我们在这里。C#打开默认浏览器的网页与邮政数据

我正在为C#编写Outlook 2010的加载项,用户可以单击功能区中的按钮并将电子邮件内容提交给Web站点。当他们点击该按钮时,网站应该在默认浏览器中打开,从而允许他们查看刚刚提交的内容并在网站上与其交互。我能够在使用url做到这一点使用查询字符串:

System.Diagnostics.Process.Start("http://www.test.com?something=value"); 

,但对可提交的数据和杂乱的URL的数量限制是阻止我用这种方法通过如下。我想用一个http post,因为它显然更合适。但是,我似乎找到了这样的方法不提交数据后打开后在浏览器上的page up:

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

总结;用户需要能够点击Outlook功能区中的按钮,打开Web浏览器并显示已通过发布提交的电子邮件内容。

编辑:

吧,我发现了一个办法做到这一点,其漂亮的fugly但它的工程!只需创建一个包含所有数据的隐藏字段的表单的临时.html文件(即如上启动),并使用javascript在页面加载时提交。

我真的不喜欢这个解决方案,因为它依赖于JavaScript(我有一个提交按钮只是incase),并且看起来像一个bodge,所以我仍然真的希望有人在这里会拿出更好的东西。

回答

2

我不确定我会如何构建解决方案。相反,我会将所有数据发布到Web服务(使用HttpWebRequest,如@Loci所述,或者只是使用Visual Studio导入服务),这会将数据存储在数据库中(可能处于未决状态)。然后将用户(使用Process.Start方法)引导至将显示待处理帮助票证的页面,以便他们批准或放弃票证。

听起来好像有点多的工作,但它应该清理你想要做的事情的架构。另外,您还可以从不担心如何从客户端触发表单发布。

编辑:

一个plain ASMX web service至少应该让你开始。您可以右键单击您的项目并选择添加服务引用以生成用于调用服务的代理代码。

+0

谢谢!但不幸的是,目前这种情况远远超过了我。我会做一些研究,看看我能否得到类似的工作,并发布我的结果。 – Ben 2012-04-12 13:46:00

+0

更新了我的答案。 – mgnoonan 2012-04-12 13:56:07

+0

好消息!这不再超出我的意思,所以我已经接受了你的答案(迟了4年)! – Ben 2016-10-28 13:11:59

2

Dropbox客户端的功能与您在编辑中提到的方法相同。但它也做了一些混淆处理,即将数据与通过URL提交的哈希异或。

这里是Dropbox的是如何做的步骤:

    应用程序内
  1. :创建一个可用于在dropbox.com授权令牌。
  2. 应用内:将令牌转换为十六进制字符串(A)。
  3. 应用内:创建一个长度相同的安全随机十六进制字符串(B)。
  4. 应用程式:计算C = A XOR B.
  5. 应用程式:
    1. 包含值B.隐藏的输入字段
    2. 甲提交形式:具有以下功能创建临时HTML文件隐藏的输入字段需要登录dropbox.com。
    3. 从URI读取哈希值的JS函数,将其与B进行XOR并将结果写入提交表单隐藏字段。
    4. 从URI中删除散列。
    5. 提交表单。
  6. 应用内:使用标准浏览器打开临时HTML文件,并将C作为散列添加到URI的末尾。

现在,如果您的浏览器打开HTML文件,它会从隐藏的输入字段和URI中的哈希计算auth令牌,并打开dropbox.com。并且因为5.4。您无法在浏览器中点击后退按钮来重新登录,因为哈希没有了。

相关问题