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 ...
随机推荐
- [.net 面向对象编程基础] (14) 重构
[.net 面向对象编程基础] (14) 重构 通过面向对象三大特性:封装.继承.多态的学习,可以说我们已经掌握了面向对象的核心.接下来的学习就是如何让我们的代码更优雅.更高效.更易读.更易维护.当然 ...
- C#Light 再推荐,顺便介绍WP8 功能展示项目
由于在项目中验证了C#Light脚本,C#Light的健壮和稳定程度已经得到了很大的提升. 现在可以更好的把C#Light介绍给大家使用,同时也有更多的自信,告诉大家这是一个已经具有商业价值的类库. ...
- 缓存篇~第八回 Redis实现基于方法签名的数据集缓存~续(优化缓存中的key)
返回目录 上一讲主要是说如何将数据集存储到redis服务器里,而今天主要说的是缓存里的键名,我们习惯叫它key. redis或者其它缓存组件实现的存储机制里,它将很多方法对应的数据集存储在一个公共的空 ...
- Atitit 图像处理 公共模块 矩阵扫描器
Atitit 图像处理 公共模块 矩阵扫描器 1.1. 调用说明对矩阵像素遍历处理调用1 2. 矩阵扫描器主题结构1 2.1. 主要说明 从像素点开始填充矩阵1 2.2. 得到模板中心点所对应的图像坐 ...
- Atitti css transition Animation differ区别
Atitti css transition Animation differ区别 1.1. transition的优点在于简单易用,但是它有几个很大的局限. 1 1.2. Transition ...
- iOS-性能优化4
UITableView性能优化技巧 Table view需要有很好的滚动性能,不然用户会在滚动过程中发现动画的瑕疵. 为了保证table view平滑滚动,确保你采取了以下的措施: 正确使用`reus ...
- C 中读取键盘码
键盘码在底层开发中经常用到,有时候我们会忘记它们,就要急急忙忙的去找 键-码 对照表查看,其实程序可以自己打印出 键-码 对应值 #include <stdio.h> #include & ...
- Oracle日期函数和循环总结
一,日期相关的函数 Select to_char(sysdate,'Q') from dual;--指定日期的季度 Select to_char(sysdate,'MM') from dual;--月 ...
- SSIS连接SAPBI
SSIS默认的连接管理器是没有连接到Oracle或SAPBI的,因此如果希望SSIS调用SAP RFC的话,可以使用微软提供的连接管理器插件. 有关这一点的详细信息可以参考MSDN的官 ...
- 【.NET深呼吸】INotifyPropertyChanged接口的真故事
无论是在流氓腾的问问社区,还是在黑度贴吧,或是“厕所等你”论坛上,曾经看到过不少朋友讨论INotifyPropertyChanged接口.不少朋友认为该接口是为双向绑定而使用的,那么,真实的情况是这样 ...