使用Grapevine的WinForms REST API服务器

时间:2018-05-14 14:13:07

标签: c# winforms rest grapevine

我想在我的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对象(不使用丑陋的全局/静态变量)。

如何优雅地做到这一点?

1 个答案:

答案 0 :(得分:2)

如果您希望路径可以访问当前表单(或项目中的任何其他对象/变量),则可以利用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");