一、为什么要这样做
在不同平台、语言之间调用,最方便有效的方法是用Http服务,有例如RPC或者restful api等规范,如果已经在开发了一个WinFrom程序或者.Net程序,想增加一个API接口给其他人调用,或者不想暴露一些算法和密钥,或许使用这个方法是最优解。(当然你可以写成类库或者其他方法)。在Go中可以用Gin,Python可以试试用Flask,易语言可试试用“E2EE互联网服务器套件”
二、Nancy
Nancy是一个轻量级的,低代码的框架,用于在.NET Framework/Core和Mono上构建基于HTTP的服务。该框架的目标是尽可能地远离障碍,并为所有交互提供一条超级傻瓜快乐的道路。
相对于自己在.Net框架上使用HttpListener或者HttpServer类,简直是敏捷开发的福音。可以方便为已经完成的.Net软件增加一个对外暴露的接口。
Nancy已经不再维护,但是他已经兼容.Net Core也是在Github开源,所以已经关系不大。
三、为WinFrom添加
1、通过Nuget安装
如果是为一个软件增加Http服务器功能,需要同时安装Nancy与Nancy.Hosting.Self
1 | Install-Package Nancy |
2、在你的软件中添加以下代码启动Nancy
1 | NancyHost nh; |
建议把NancyHost放在Class内作为全局变量。这样子已经启动了一个HTTP服务器
3、增加你的API接口
我们需要新建一个类文件(.cs),然后类名字可以任意,然后继承NancyModule即可,并在类构造函数中增加你需要处理的URL接口数据。
1 | Get("/getip", _ => |
注意,Nancy的主页依旧使用Get[“/getip”]这种方法,2.0已经更改,所以如果按照主页的代码会直接报错。
四、一些后续测试
Nancy里面大量使用dynamic这个数据类型,可以避免编译器查找数据,在增加路由时,可以无视任何类,直接随便新建一个类继承便可,启动时也不需要传入该类,不清楚内部实现原理,感觉有点像使用反射。官方示例也大量使用匿名方法和委托,需要继续学习。