C# 在默认浏览器中打开网页并发布数据

2024-03-25

我确信之前一定已经回答过这个问题,但我找不到解决方案,所以我想我可能误解了其他人的解决方案或试图做一些愚蠢的事情,但我们开始了。

我正在用 C# 编写 Outlook 2010 的加载项,用户可以单击功能区中的按钮并将电子邮件内容提交到网站。当他们单击该按钮时,网站应该在默认浏览器中打开,从而允许他们查看刚刚提交的内容并在网站上与之交互。我可以使用 URL 中的查询字符串来执行此操作:

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

但可提交的数据量的限制和混乱的 URL 阻碍了我采用这种方法。我想为此使用 HTTP POST,因为它显然更合适。但是,我找到的执行此操作的方法似乎在提交帖子数据后不会在浏览器中打开页面:

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

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

EDIT:

是的,我找到了一种方法,虽然很丑陋,但很有效!只需创建一个临时 .html 文件(然后按上述方式启动),其中包含一个包含所有数据隐藏字段的表单,并使用 JavaScript 在页面加载时提交该文件。

我不太喜欢这个解决方案,因为它依赖于 JavaScript(我有一个<noscript>提交按钮以防万一)似乎有点困难,所以我仍然真的希望这里有人能想出更好的东西。


虽然晚了八年,但这里有一些代码很好地说明了这个过程:

string tempHTMLLocation = "some_arbitrary_location" + "/temp.html";
string url = https://your_desired_url.com";

    // create the temporary html file
    using (FileStream fs = new FileStream(tempHTMLLocation, FileMode.Create)) { 
        using (StreamWriter w = new StreamWriter(fs, Encoding.UTF8)) { 
            w.WriteLine("<body onload=\"goToLink()\">");
            w.WriteLine("<form id=\"form\" method=\"POST\" action=\"" + url + "\">");
            w.WriteLine("<input type=\"hidden\" name=\"post1\" value=\"" + post_data1 + "\">");
            w.WriteLine("<input type=\"hidden\" name=\"post2\" value=\"" + post_data2 + "\">");
            w.WriteLine("</form>");
            w.WriteLine("<script> function goToLink() { document.getElementById(\"form\").submit(); } </script>");
                        w.WriteLine("</body>");
        } 
    }

    // launch the temp html file
    var launchProcess = new ProcessStartInfo {
        FileName = tempHTMLLocation,
        UseShellExecute = true
    };
    Process.Start(launchProcess);

    // delete temp file but add delay so that Process has time to open file
    Task.Delay(1500).ContinueWith(t=> File.Delete(tempHTMLLocation));

打开页面后,onload() JS 脚本立即提交表单,该表单将数据发布到 url 并在默认浏览器中打开它。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C# 在默认浏览器中打开网页并发布数据 的相关文章

  • 将处理后的图形绘制到另一个图形中

    我想将一个经过处理的图形绘制到另一个图形中 I have two graphics var gHead Graphics FromImage h var gBackground Graphics FromImage b Transform
  • 赋值运算符和复制构造函数有什么区别?

    我不明白C 中赋值构造函数和复制构造函数之间的区别 是这样的 class A public A cout lt lt A A lt lt endl The copy constructor A a b The assignment cons
  • 为什么基类必须有一个带有 0 个参数的构造函数?

    这不会编译 namespace Constructor0Args class Base public Base int x class Derived Base class Program static void Main string a
  • 捕获 foreach 条件中抛出的异常

    我有一个foreach在 foreach 本身的条件下循环期间中断的循环 有没有办法try catch抛出异常然后继续循环的项 这将运行几次 直到异常发生然后结束 try foreach b in bees exception is in
  • Blazor 与 Razor

    随着 Blazor 的发明 我想知道这两种语言之间是否存在显着的效率 无论是在代码创建方面还是在代码的实际编译 执行方面 https github com SteveSanderson Blazor https github com Ste
  • std::map 和二叉搜索树

    我读过 std map 是使用二叉搜索树数据结构实现的 BST 是一种顺序数据结构 类似于数组中的元素 它将元素存储在 BST 节点中并按其顺序维护元素 例如如果元素小于节点 则将其存储在节点的左侧 如果元素大于节点 则将其存储在节点的右侧
  • VS30063:您无权访问 https://dev.azure.com

    我正在尝试在 asp net core 2 1 mvc 应用程序中使用以下代码连接 Azure DevOps Uri orgUrl new Uri https dev azure com xxxxx String personalAcces
  • 转到 C# WPF 中的第一页

    我正在 WPF 中使用导航服务 为了导航到页面 我使用 this NavigationService Navigate new MyPage 为了返回我使用 this NavigationService GoBack 但是如何在不使用的情况
  • 为什么 std::allocator 在 C++17 中丢失成员类型/函数?

    一边看着std 分配器 http en cppreference com w cpp memory allocator 我看到成员 value type pointer const pointer reference const refer
  • 范围和临时初始化列表

    我试图将我认为是纯右值的内容传递到范围适配器闭包对象中 除非我将名称绑定到初始值设定项列表并使其成为左值 否则它不会编译 这里发生了什么 include
  • C# using 语句、SQL 和 SqlConnection

    使用 using 语句 C SQL 可以吗 private static void CreateCommand string queryString string connectionString using SqlConnection c
  • 32位PPC rlwinm指令

    我在理解上有点困难rlwinmPPC 汇编指令 旋转左字立即然后与掩码 我正在尝试反转函数的这一部分 rlwinm r3 r3 0 28 28 我已经知道什么了r3 is r3在本例中是一个 4 字节整数 但我不确定这条指令到底是什么rlw
  • Android:无法发送http post

    我一直在绞尽脑汁试图弄清楚如何在 Android 中发送 post 方法 这就是我的代码的样子 public class HomeActivity extends Activity implements OnClickListener pr
  • gdb查找行号的内存地址

    假设我已将 gdb 附加到一个进程 并且在其内存布局中有一个文件和行号 我想要其内存地址 如何获取文件x中第n行的内存地址 这是在 Linux x86 上 gdb info line test c 56 Line 56 of test c
  • 内核开发和 C++ [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 从我know https stackoverflow com questions 580292 what languages are windo
  • 为什么我使用google'smtp'无法发送电子邮件?

    我有以下程序使用 smtp gmail com 587 发送电子邮件 namespace TestMailServer class Program static void Main string args MailMessage mail
  • 我应该在应用程序退出之前运行 Dispose 吗?

    我应该在应用程序退出之前运行 Dispose 吗 例如 我创建了许多对象 其中一些对象具有事件订阅 var myObject new MyClass myObject OnEvent OnEventHandle 例如 在我的工作中 我应该使
  • 过度使用委托对性能来说是一个坏主意吗? [复制]

    这个问题在这里已经有答案了 考虑以下代码 if IsDebuggingEnabled instance Log GetDetailedDebugInfo GetDetailedDebugInfo 可能是一个昂贵的方法 因此我们只想在调试模式
  • 如何查明CONFIG_FANOTIFY_ACCESS_PERMISSIONS是否启用?

    我想利用fanotify 7 http man7 org linux man pages man7 fanotify 7 html我遇到的问题是在某些内核上CONFIG FANOTIFY ACCESS PERMISSIONS不起作用 虽然C
  • Swagger 为 ASP.CORE 3 中的字典生成错误的 URL

    当从查询字符串中提取的模型将字典作为其属性之一时 Swagger 会生成不正确的 URL 如何告诉 Swagger 更改 URL 中字典的格式或手动定义输入参数模式而不自动生成 尝试使用 Swashbuckle 和 NSwag 控制器 pu

随机推荐