带有小道消息的 WinForms REST API 服务器
WinForms REST API Server With Grapevine
我想将 REST API 服务器添加到我的 WinForms 应用程序。为此,我选择使用 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 对象(不使用难看的 global/static 变量)。
如何优雅地做到这一点?
如果您希望您的路线可以访问当前表单(或项目中的任何其他 object/variable),您可以利用 Dynamic Properties。 IRestServer
和 IHttpContext
都实现了 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");
我想将 REST API 服务器添加到我的 WinForms 应用程序。为此,我选择使用 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 对象(不使用难看的 global/static 变量)。
如何优雅地做到这一点?
如果您希望您的路线可以访问当前表单(或项目中的任何其他 object/variable),您可以利用 Dynamic Properties。 IRestServer
和 IHttpContext
都实现了 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");