Nancy 框架学习
Nancy 框架
1、是一个轻量级用于构建http相应的web框架;
2、与mvc类似,有自己的路由机制;
3、可以处理 DELETE
, GET
, HEAD
, OPTIONS
, POST
, PUT
和 PATCH等请求;
4、完美支持OWIN(可以说他就是为OWIN而生的);
1、创建项目
打开vs,创建asp.net项目,选择empty模板;
如图
2、安装模板
Package Manage Console,输入命令
Install-Package Nancy
Install-Package Nancy.Owin
Install-Package Microsoft.Owin
解释: 因为本篇实例是寄宿在TinyFox (国内牛人编写的宿主容器,三平台通吃哦!!下载地址http://linuxdot.net/down/tinyfox-2.3.tar.gz),所以只需安装这三个即可;
3、Owin相关配置
添加 Startup 方法新建项目选择 OWIN Startup class
代码如下
using System;
using System.Threading.Tasks;
using Microsoft.Owin;
using Owin; [assembly: OwinStartup(typeof(NancyDemo.Startup))] namespace NancyDemo
{
public class Startup
{
public void Configuration(IAppBuilder app)
{
// For more information on how to configure your application, visit http://go.microsoft.com/fwlink/?LinkID=316888
app.UseNancy();//增加Nancy 中间件到Owin管线;
}
}
}
添加Adapter,将下面的代码复制即可,我也是复制的!
public class Adapter
{
/*************************************
* 这是一个比较完整的适配器示例
* ***********************************/ /// <summary>
/// OWIN 应用程序委托
/// </summary>
static Func<IDictionary<string, object>, Task> _owinApp; /// <summary>
/// 适配器构造函数
/// </summary>
public Adapter()
{ //实例化一个应用程序生成器
var builder = new AppBuilder(); // 为生成器添加一些参数
// 因某些OWIN框架需要从该参数中得到一些初始化环境信息
// 这些信息可以包括 如“owin版本”“服务器功”能等等
var properties = builder.Properties;
properties["owin.Version"] = "1.0"; // 只能是1.0 var disposeSource = new CancellationTokenSource();
properties["server.OnDispose"] = disposeSource.Token; Func<Task> svrInitCallback = null;
Action<Func<Task>> init = (callback) => { svrInitCallback = callback; };
properties["server.OnInit"] = init;
//....... var capabilities = properties.ContainsKey("server.Capabilities") ? properties["server.Capabilities"] as IDictionary<string, object> : new Dictionary<string, object>();
properties["server.Capabilities"] = capabilities;
capabilities["server.Name"] = "TinyFox";
//capabilities["websocket.Version"] = "1.0";
//...... //实例化用户的启动类,并调用配置方法
//如果用户启动类在其它的dll中,就需要通过反射找出这个类
var startup = new Startup();
startup.Configuration(builder); //构建OWIN应用并获取该应用的代理(委托)方法
_owinApp = builder.Build(); //要求应用程序域退出时,向本类发出通知
AppDomain.CurrentDomain.DomainUnload += ((o, e) => { disposeSource.Cancel(); }); //回调应用层初始化函数
if (svrInitCallback != null) svrInitCallback().Wait(); } /// <summary>
/// *** Jexus/TinyFox所需要的关键函数 ***
/// </summary>
/// <param name="env">新请求的环境字典,具体内容参见OWIN标准</param>
/// <returns>返回一个正在运行或已经完成的任务</returns>
public Task OwinMain(IDictionary<string, object> env)
{
//如果为空
if (_owinApp == null) return null; //调用Microsoft.Owin的应用程序委托函数,将请求传给OWIN框架
return _owinApp(env);
} } //end class
修改Nancy的根目录设置 方法就是 增加下面的类即可 (直接复制吧)
using Nancy;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web; namespace NancyDemo
{
public class SiteRootPath : IRootPathProvider
{ /**************************************************************
* TinyFox Owin Server 默认情况下
* 网站是放在 TinyFox 进程所在文件夹下的site/wwwroot中的
* ----------------------------------------------------------
* 如果你把 NancyFx 的 Views 页放在其它的地方,应该作相应修改
*******************************************************************/ /// <summary>
/// 网站根文件夹物理路径(for tinyfox)
/// </summary>
static readonly string _RootPath = AppDomain.CurrentDomain.GetData(".appPath").ToString(); /// <summary>
/// 获取网站或WEB应用的根文件夹的物理路径
/// </summary>
/// <returns></returns>
public string GetRootPath()
{
return _RootPath; } }
}
配置文件中增加如下配置
<appSettings>
<add key="owin:HandleAllRequests" value="true"/>
</appSettings>
为了方便调试,我需要对项目属性进行设置,设置如下图
4、开始coding
创建模块(与mvc controller类似)
代码如下
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Nancy;
namespace NancyDemo
{
public class HomeModule : NancyModule//每个module必须继承自NancyModule
{
public HomeModule()
{
Get["/"] = _ =>
{
return Response.AsText("呵呵", "text/html;charset=UTF-8");//中文不乱码了!!
};//这里定义了访问网站根目录的route get 请求
}
}
}
到这里就可以简单的运行了,F5!!
运行效果如下图
到这里就简单的搭建了一个Nancy站点,over!
补充:
Nancy owin模式寄宿在TinyFox 会存在web.config配置读取不到的问题
解决方法就是 把web.config复制到TinyFox.exe相同目录下 改成TinyFox.exe.config;
如果本身存在这个文件就直接把web.config中的内容复制到TinyFox.exe.config中;
Nancy 框架学习的更多相关文章
- 【框架学习】Nancy 框架
Nancy 框架 http://liulixiang1988.github.io/nancy-webkuang-jia.html .是一个轻量级用于构建http相应的web框架: .与mvc类似,有自 ...
- ASP.NET Core开发-使用Nancy框架
Nancy简介 Nancy是一个轻量级的独立的框架,下面是官网的一些介绍: Nancy 是一个轻量级用于构建基于 HTTP 的 Web 服务,基于 .NET 和 Mono 平台,框架的目标是保持尽可能 ...
- NET Core开发-使用Nancy框架
NET Core开发-使用Nancy框架 Nancy简介 Nancy是一个轻量级的独立的框架,下面是官网的一些介绍: Nancy 是一个轻量级用于构建基于 HTTP 的 Web 服务,基于 .NET ...
- IdentityServer4 ASP.NET Core的OpenID Connect OAuth 2.0框架学习保护API
IdentityServer4 ASP.NET Core的OpenID Connect OAuth 2.0框架学习之保护API. 使用IdentityServer4 来实现使用客户端凭据保护ASP.N ...
- Hadoop学习笔记—18.Sqoop框架学习
一.Sqoop基础:连接关系型数据库与Hadoop的桥梁 1.1 Sqoop的基本概念 Hadoop正成为企业用于大数据分析的最热门选择,但想将你的数据移植过去并不容易.Apache Sqoop正在加 ...
- Spring框架学习一
Spring框架学习,转自http://blog.csdn.net/lishuangzhe7047/article/details/20740209 Spring框架学习(一) 1.什么是Spring ...
- EF框架学习手记
转载: [ASP.NET MVC]: - EF框架学习手记 1.EF(Entity Framework)实体框架EF是ADO.NET中的一组支持开发面向数据的软件应用程序的技术,是微软的一个ORM框架 ...
- web框架学习列表
转载自鲁塔弗的博客,原文网址:http://lutaf.com/148.htm web framework层出不穷,特别是ruby/python,各有10+个,php/java也是一大堆 根据我自己的 ...
- Nancy总结(二)记一次Nancy 框架中遇到的坑
记一次Nancy 框架中遇到的坑 前几天,公司一个项目运行很久的Nancy框架的网站,遇到了一个很诡异的问题.Session 对象跳转到另外一个页面的时候,session对象被清空了,导致用户登录不上 ...
随机推荐
- 关于identifier was truncated to '255' characters
学习c++过程中,遇到在VC中使用set时DEBUG模式出现的警告 identifier was truncated to '255' characters in the debug informat ...
- 【SSH 基础】浅谈Hibernate关系映射(4)
继上篇博客 多对多关联映射(单向) 多对多对象关系映射,须要增加一张新表完毕基本映射. Hibernate会自己主动生成中间表 Hibernate使用many-to-many标签来表示多对多的关联,多 ...
- jQuery插件实战之fullcalendar(日历插件)Demo
jQuery的插件许多,应用的场景也很丰富,今天我这里给大家介绍一款很有用的日历页面开发插件 - fullcalendar,眼下最新版本号是1.5.1,使用这款插件可以高速帮助你高速编程实现基于web ...
- 也说Javascript对象拷贝及疑问
一.浅拷贝 当我们需要将一个对象拷贝至另一个对象时,我们一般会这么实现 function shadowCopy(source,target){ var target=target||{}; for(v ...
- shell统计
for i in `ls -r *_*.csv`;do cat $i|echo $i": "`wc -l`;done>tongji.txt
- wpa/wpa2破解系统(CDlinux)U盘启动傻瓜教程
CDlinux是破解无线wifi信号的很好用的系统.它就像一个PE,不过它是基于Linux内核的微型系统.里面的破解工具很齐全,既有传统的抓包工具,也有最新的PIN码破解软件,而且针对windows用 ...
- Android源代码同步脚本(增加设置线程参数)
#!/bin/sh #Filename: repo_sync.sh count= ret= ] do #输入参数1,用作同步的线程数 #如果什么参数都不输入,默认线程为4 #usage: ./repo ...
- 【SICP归纳】2 高阶函数和数据抽象
上一篇博文相应的是书中的第一章的一二两节,我们已经大致的有了一种构造的感觉不是么. 书中展示了非常多有趣的句法(syntax). 如今我们要让思想进一步的抽象.写这篇博客的时候并未学完整本书.更不敢说 ...
- Java反射探索研究(转)
林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankakay 摘要:本文详细深入讲解是Java中反射的机制,并介绍了如何通过反射来生成对象.调用函数.取得 ...
- 隐藏快捷方式扩展名(.lnk)
自从装了Windows 7操作系统以后,有一个问题一直困扰着我.当我去掉“目录选项中”的“隐藏已知文件类型的扩展名”选项的“√”之后,桌面上的快捷方式的扩展名也出来了,看上去非常不爽.记得在XP.Vi ...