【问题标题】:Listening for http requests in a windows forms application在 Windows 窗体应用程序中侦听 http 请求
【发布时间】:2012-03-01 00:29:09
【问题描述】:

我必须编写一个 .net windows 窗体应用程序,该应用程序将打开一个网页,然后能够对用户单击网页上的某些链接做出反应。我得到的规范是网页上的链接只是 http 链接。

有没有办法让我的 .net 应用程序在其上拥有一个最小的 Web 服务器,以允许它处理给定端口上的 http 请求?

【问题讨论】:

  • 您可能需要在此处阐明您的目标。 Windows 窗体应用程序是否将包含将显示所需网页的 WebBrowser 控件? 用户会使用您的 Windows 窗体应用程序来浏览网页吗?您对哪些“特定”类型的链接感兴趣?
  • HttpListener 应该适合你。

标签: c# .net winforms http


【解决方案1】:

根据您需要的功能,有不同的方法可以做到这一点。如果您需要做的只是响应点击事件,并且您不需要“完整的”http 协议支持,您可以打开一个套接字并解析来自浏览器的内容。

您也可以使用 HttpListener,它会为您处理 http 协议解析,并且相对易于使用。对于我认为您需要的东西,这可能是首选方法。此处为简单的非编译示例:https://gist.github.com/1770645

“圣杯”是在您的 Windows 窗体应用程序中托管 ASP.NET 运行时。我已经这样做了,而且非常投入。运行时必须托管在一个单独的 AppDomain 中,因此您最终要跳过很多圈才能让所有东西都运行并连接起来。它还涉及编写 HttpWorkerRequest 的实现,该实现比框架提供的 SimpleWorkerRequest 功能更全面。顺便说一句,这也适用于 Windows 服务,它为您提供了一种通过浏览器提供服务管理和监视的好方法,而无需依赖 IIS。

【讨论】:

  • 此外,WCF 端点也可以托管在表单应用程序中。
【解决方案2】:

我对这个问题的解释与其他用户不同,所以也许我离题了,但是当他试图从网络呈现网页并对用户点击网页中的链接做出反应时,我读到了它。

我能想到的唯一方法是使用某种形式的渲染器,即 webkit 并连接到它以拦截用户的点击。

【讨论】:

    【解决方案3】:

    如果您只需要显示一个网页,并且您对使用的浏览器没有任何限制,那么WebBrowser 控件就可以解决问题。

    1. 将其拖到您的表单中
    2. Url属性设置为需要显示的页面
    3. 附加到Navigating 事件

    您现在可以响应点击、取消点击,做任何您喜欢的事情。如果它只是响应您需要的客户端点击,则不需要 Web 服务器。如果您确实需要网络服务器,WinForms 应该与它无关。

    webBrowser1.Navigating += new WebBrowserNavigatingEventHandler(webBrowser1_Navigating);
    
    private void webBrowser1_Navigating(object sender, 
        WebBrowserNavigatingEventArgs e)
    {
       //Do your thing... maybe set e.Cancel if you don't to navigate
    }
    

    【讨论】:

      【解决方案4】:
      【解决方案5】:

      请查看 WebBrowser 控件,特别是“ObjectForScripting”属性。如果您将其设置为父表单,您实际上可以在您的 c# 代码中处理 webbrowser 中加载的页面中的 javascript 事件!!!

      希望对你有帮助!

      【讨论】:

        【解决方案6】:
        猜你喜欢
        • 2010-10-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-08-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多