【问题标题】:WinForms REST API Server With GrapevineWinForms REST API 服务器与 Grapevine
【发布时间】:2018-10-24 05:49:18
【问题描述】:

我想在我的 WinForms 应用程序中添加一个 REST API 服务器。为此,我选择使用 Grapveine。

这是我的代码:

namespace RestServerTest
{
  public partial class Form1 : Form
  {
    private RestServer mServer;

    public Form1()
    {
      InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
      mServer = new RestServer();
      mServer.Start();
    }

    private void Form1_FormClosing(object sender, FormClosingEventArgs e)
    {
      mServer.Stop();
      mServer.Dispose();
    }
  }

  [RestResource]
  class MyRoute
  {

    [RestRoute]
    public IHttpContext HelloWorld(IHttpContext context)
    {
      // Todo: how access form object from here?

      context.Response.SendResponse("Hello, world.");
      return context;
    }
  }
}

目前我不知道如何从 REST 路由实际访问我的 Form 对象(不使用丑陋的全局/静态变量)。

如何优雅地做到这一点?

【问题讨论】:

    标签: c# winforms rest grapevine


    【解决方案1】:

    如果您希望您的路线可以访问当前表单(或项目中的任何其他对象/变量),您可以利用Dynamic PropertiesIRestServerIHttpContext 都实现了 IDynamicProperties,这为您提供了两种实现目标的方法。

    将其中任何一个添加到您的 Form1_Load() 方法中。

    在服务器上添加引用

    server.Properties.Add("CurrentForm", this);
    

    添加 BeforeRouting 事件处理程序

    server.Router.BeforeRouting += cxt =>
    {
        cxt.Properties.Add("CurrentForm", this);
    };
    

    访问路由中的属性

    无论哪种情况,您都可以使用内置的扩展方法访问该属性:

    // On the server
    var form = context.Server.GetPropertyValueAs<Form1>("CurrentForm");
    
    // On the context
    var form = context.GetPropertyValueAs<Form1>("CurrentForm");
    

    【讨论】:

      猜你喜欢
      • 2016-04-01
      • 2017-08-11
      • 2019-12-08
      • 1970-01-01
      • 2016-03-09
      • 2018-03-12
      • 1970-01-01
      • 1970-01-01
      • 2018-08-24
      相关资源
      最近更新 更多