Nancy 学习-自宿主 继续跨平台
Nancy简介
Nancy是一个轻量级的独立的框架,下面是官网的一些介绍:
- Nancy 是一个轻量级用于构建基于 HTTP 的 Web 服务,基于 .NET 和 Mono 平台,框架的目标是保持尽可能多的方式,并提供一个super-duper-happy-path所有交互。
- Nancy 设计用于处理
DELETE
,GET
,HEAD
,OPTIONS
,POST
,PUT
和 PATCH
等请求方法,并提供简单优雅的 DSL 以返回响应。让你有更多时间专注于你的代码和程序。
官方地址:http://nancyfx.org GitHub:https://github.com/NancyFx/Nancy
创建Nancy项目(自宿主)
Nancy supports running on ASP.NET/IIS, WCF, Self-hosting and any OWIN
Nancy是支持多种宿主,今天我是采用 Self-hosting 也就是自宿主方式。
首先创建一个控制台程序:
然后添加Nuget 引用,我们在搜索框输入Nancy Self,然后搜索,如图:
直接添加第一个即可。
也可以用Nuget命令行添加:Install-Package Nancy.Hosting.Self
添加好以后,在Program.cs 添加如下代码:
using Nancy.Hosting.Self;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace NancyDemo
{
class Program
{
static void Main(string[] args)
{
using (var host = new NancyHost(new Uri("http://localhost:9000")))
{
host.Start();
Console.ReadLine();
}
}
}
}
然后启动程序,访问 http://localhost:9000 发现404 错误,那是因为我们还没添加任何Module。
下面我们添加一个HomeModule
如图:
public class HomeModule:NancyModule
{
public HomeModule()
{
Get["/"] = r =>
{
var os = System.Environment.OSVersion;
return "Hello Nancy<br/> System:"+os.VersionString;
};
}
}
再次启动访问 http://localhost:9000
下面我们再来添加一些强大的路由规则:
Get["/blog/{name}"] = r => {
return "blog name " + r.name;
};
然后我们访问 http://localhost:9000/blog/linezero ,name就可以获取到linezero
我们再来模仿mvc 的路由规则:
Get["/mvc/{controller}/{action}/{id}"] = r => {
StringBuilder mvc = new StringBuilder();
mvc.AppendLine("controller :" + r.controller+"<br/>");
mvc.AppendLine("action :" + r.action + "<br/>");
mvc.AppendLine("id :" + r.id + "<br/>");
return mvc.ToString();
};
我们访问:http://localhost:9000/mvc/blog/linezero/1
分别对应如下:
controller :blog
action :linezero
id :1
更多功能可以参看官方wiki。
完整Module代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Nancy; namespace NancyDemo
{
public class HomeModule:NancyModule
{
public HomeModule()
{
Get["/"] = r =>
{
var os = System.Environment.OSVersion;
return "Hello Nancy<br/> System:"+os.VersionString;
}; Get["/blog/{name}"] = r => {
return "blog name " + r.name;
}; Get["/mvc/{controller}/{action}/{id}"] = r => {
StringBuilder mvc = new StringBuilder();
mvc.AppendLine("controller :" + r.controller+"<br/>");
mvc.AppendLine("action :" + r.action + "<br/>");
mvc.AppendLine("id :" + r.id + "<br/>");
return mvc.ToString();
};
}
}
}
跨平台
前面一篇 http://www.cnblogs.com/linezero/p/5087997.html OWIN 跨平台。
Nancy is a lightweight, low-ceremony, framework for building HTTP based services on .NET and Mono.
官方介绍是可以直接运行在mono上。所以下面我们就来看看一下运行在linux下。首先大家要安装好 mono。
测试系统版本:centos 6.4 mono 3.10.0
将程序上传到linux 下,然后定位到程序目录,通过命令启动程序:mono NancyDemo.exe
程序已成功启动,下面我来访问看看:
可以看到系统标示已经是Linux。
参考链接:
http://www.cnblogs.com/shanyou/archive/2013/04/11/3015654.html
https://github.com/NancyFx/Nancy/wiki
如果你觉得本文对你有帮助,请点击“推荐”,谢谢。
Nancy 学习-自宿主 继续跨平台的更多相关文章
- Nancy 学习-视图引擎 继续跨平台
前面一篇,讲解Nancy的基础,以及Nancy自宿主,现在开始学习视图引擎. Nancy 目前支持两种 一个是SSVE 一个是Razor.下面我们一起学习. The Super Simple View ...
- Nancy 学习-进阶部分 继续跨平台
前面两篇,讲解Nancy的基础,及Nancy自宿主和视图引擎. 现在来学习一些进阶部分. Bootstrapper Bootstrapper 就相当于 asp.net 的Global.asax . 我 ...
- Nancy学习
Nancy学习 一.认识Nancy 今天听讲关于Nancy框架的培训,被Nancy的易用性所吸引.故晚上回来梳理了一下知识. 什么是Nancy呢?如标题所述,Nancy是一个轻量级的独立的框架: Na ...
- Nancy 学习-身份认证(Basic Authentication) 继续跨平台
开源 示例代码:https://github.com/linezero/NancyDemo 前面讲解Nancy的进阶部分,现在来学习Nancy 的身份认证. 本篇主要讲解Basic Authentic ...
- Nancy 学习-身份认证(Forms authentication) 继续跨平台
开源 示例代码:https://github.com/linezero/NancyDemo 上篇讲解Nancy的Basic Authentication,现在来学习Nancy 的Forms身份认证. ...
- 原创|我是如何从零学习开发一款跨平台桌面软件的(Markdown编辑器)
原始冲动 最近一直在学习 Electron 开发桌面应用程序,目的是想做一个桌面编辑器,虽然一直在使用Typore这款神器,但无奈Typore太过国际化,在国内水土不服,无法满足我的一些需求. 比如实 ...
- 我是如何从零学习开发一款跨平台桌面软件的(Markdown编辑器)
[本文版权归微信公众号"代码艺术"(ID:onblog)所有,若是转载请务必保留本段原创声明,违者必究.若是文章有不足之处,欢迎关注微信公众号私信与我进行交流!] 原始冲动 最近一 ...
- 轻量级MVC框架:Nancy学习
一.认识Nancy 今天听讲关于Nancy框架的培训,被Nancy的易用性所吸引.故晚上回来梳理了一下知识. 什么是Nancy呢?如标题所述,Nancy是一个轻量级的独立的框架: Nancy 是一个轻 ...
- 《java JDK7学习笔记》之跨平台与路径设置
Platforms表示Solaris.Linux.Windows各种操作系统平台,在这些平台上架构了java Virtaul Machine,简称JVM,Java虚拟机. Java虚拟机可以让java ...
随机推荐
- SQL SERVER--DBA 常用到的一些脚本
自己整理了一些常用到的脚本,希望对各位有用 下载地址 --================================== 妹子不能少,是吧 BTW, 妹子是我辛苦百度来的,请不要求种求介绍各种求 ...
- MySQL--使用xtrabackup进行备份还原
使用rpm包安装xtrabackup ## 安装依赖包 yum -y install perl perl-devel libaio libaio-devel perl-Time-HiRes perl- ...
- [异常解决] vmware tools 虚拟机 --> 更新/导入wmwera tools菜单变灰,无法导入问题解决
在虚拟中的装Ubuntu只要下载一个Ubuntu镜像,按照新建的指示一步一步安装 ,但是安装好之后想从原来系统中复制点东西到虚拟机中的Ubuntu中却有点麻烦.幸好Vmware自带了一个VMware ...
- 大叔也说Xamarin~Android篇~监听返回键,单击返回某个webView,双击退出
回到目录 这个操作在原生android里是很容易实现的,在xamarin里也不难,在activity里有方法OnKeyDown,我们只需要重写一下就可以了,然后通过webView重新加载到要返回的页面 ...
- 爱上MVC~为非法进行Action的用户提供HttpStatusCodeResult
回到目录 对一MVC来说,它有Controller和Action,其中Action用来为页面提供数据和相关逻辑,并最后将页面渲染出来,而有些action是需要一些参数的,如文章的最终页,可能需要一个I ...
- PHP面向对象之魔术方法复习
魔术方法复习 2014-9-2 10:08:00 NotePad++ By jiancaigege 飞鸿影~========================= 1.__construct() 构造方法 ...
- fir.im Weekly - 如何用 iPad 创造技术生产力
传播学大师麦克卢汉有一个著名理论--「 媒介即讯息,媒介是人的延伸」,在当代,表现更为明显的是「工具即为人的延伸」,工具使人自由.那么,我们究竟需要什么样的工具释放技术生产力?本期 fir.im We ...
- iOS中的预编译指令的初步探究
目录 文件包含 #include #include_next #import 宏定义 #define #undef 条件编译 #if #else #endif #if define #ifdef #i ...
- java 线程的终止与线程中断
关于线程终止: 1.一般来讲线程在执行完毕后就会进入死亡状态,那该线程自然就终止了. 2.一些服务端的程序,可能在业务上需要,常驻系统.它本身是一个无穷的循环,用于提供服务.那对于这种线程我们该如何结 ...
- canvas游戏之贪食蛇
直接上效果图: 这个贪食蛇关键地方在于数组,它的长度增加其实是数组的增长,就是数组的向前追加等操作,核心就是数组的操作. 完整代码: <!DOCTYPE html> <html> ...