【问题标题】:c# Adding web functionality to a windows forms projectc# 将 web 功能添加到 windows 窗体项目
【发布时间】:2016-04-19 09:21:12
【问题描述】:

我在服务器上运行一个 Windows 窗体应用程序,它可以做很多事情。我的目的是为应用程序提供一些网络功能,例如在浏览器中查看日志文件或通过浏览器操作 Settings.Defaults。

是否可以将 web 功能添加到 winforms 应用程序?

【问题讨论】:

  • view the logfile in a browser 使用 winform 应用程序是什么意思?
  • 您可以在 windows 窗体中使用WebBrowserContorl
  • 为应用程序获取一些网络功能


    我认为您需要对此进行更多解释,但是您可以搜索 http 侦听器,但我宁愿建议您可以构建一个 Web 应用程序,该应用程序可以共享来自您的 winform 应用程序的内容。
  • No WebBrowserControl 用于在 Windows 窗体中使用 Webbrowser,我的意思是从服务器外部的浏览器访问 winform 应用程序。例如,我从客户端电脑通过浏览器联系 url servername/winformapp.aspx 或获取上述功能的东西。 @Shaharyar:在这个页面上,我会看到服务器上的应用程序在做什么。目前它写入本地文本文件。
  • 您必须创建一个web service,它将读取该文件并将数据返回给您。您也可以通过制作一个简单的webform 并使用Response.Write 抛出数据来实现它。但是网络服务更可取。

标签: c# asp.net windows winforms web


【解决方案1】:

是的,您可以将 Web API 自托管到您的 Windows 窗体应用程序中,如演示 here

第二种选择是使用ASP.NET 5 self-hosting,但它仍处于测试阶段,还没有好的文档。

编辑 1: 要支持使用 Web API 2 查看页面,您需要执行以下步骤: 首先,让 JSON 格式化程序处理 HTML 请求,如下所示

config.Routes.MapHttpRoute(
  "API Default", "api/{controller}/{id}",
  new { id = RouteParameter.Optional });

// Add the supported media type.            
config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html"));

其次,使用占位符将所需的 html 模板文件保存在磁盘上,这些占位符将在运行时替换为您的实际数据,并如下更改控制器

    public String GetAllProducts()
    {
        //Should be loaded from HTML template file ex. Products.html
        string html = "<html><body><table border=\"2\"><tr><th>ID</th><th>Name</th><th>Category</th><th>Price</th><tr>{{placeholder}}</table></body></html>";
        StringBuilder sb = new StringBuilder();
        foreach (var item in products)
        {
            sb.AppendLine("<tr><td>" + item.Id + "</td><td>" + item.Name + "</td><td>" + item.Category + "</td><td>" + item.Price + "</td></tr>");
        }
        return html.Replace("{{placeholder}}", sb.ToString());
    }

注意:如果您不喜欢默认的 JSON 格式化程序,您可以像 this project 那样编写自己的格式化程序。

【讨论】:

  • 链接听起来很有趣,我会看看。
  • 嗨,这个链接对我很有帮助,我使用了 owin 方法。例如,我现在可以通过localhost:9000/api/settings 获取 Setting.Default.sourcepath 值。但是如何给我的应用程序一个网络界面?我的意思是,去localhost:9000/index.aspx(或html?)在那里我定义我的所有设置,例如将它发布到我的api?
猜你喜欢
  • 1970-01-01
  • 2012-01-01
  • 2017-11-29
  • 2017-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多