Nancy 搭建
一:创建一个空项目

二:安装模板
Install-Package Nancy
Install-Package Nancy.Owin
Install-Package Microsoft.Owin
install-package Nancy.ViewEngines.Razor
三:建好的项目图

四:RazorConfig类的内容及作用
using System.Collections.Generic;
using Nancy.ViewEngines.Razor; namespace NancyMvc.Config
{
/// <summary>
/// Razor配置,如果你需要使用 cshtml,这个配置比较重要,当然,也可以在这儿加入其它的类
/// </summary>
public class RazorConfig: IRazorConfiguration
{
/// <summary>
/// 需加载的程序集列表
/// </summary>
/// <returns></returns>
public IEnumerable<string> GetAssemblyNames()
{
//加了这句,才能处理 cshtml
yield return "System.Web.Razor";
}
/// <summary>
/// 需要添加到cshtml中的名字空间
/// </summary>
/// <returns></returns>
public IEnumerable<string> GetDefaultNamespaces()
{
yield return "System.Web.Razor";
} /// <summary>
/// 是否自动引用model名字空间
/// </summary>
public bool AutoIncludeModelNamespace
{
get { return true; }
}
}
}
五:SiteRootPath 内容及作用,不可少,不然项目有错误
using System;
using Nancy; namespace NancyMvc.Config
{
/// <summary>
/// 提供网站物理路径的类
/// </summary>
public class SiteRootPath : IRootPathProvider
{
/**************************************************************
* TinyFox Owin Server 默认情况下
* 网站是放在 TinyFox 进程所在文件夹下的site/wwwroot中的
* ----------------------------------------------------------
* 如果你把 NancyFx 的 Views 页放在其它的地方,应该作相应修改
*******************************************************************/ /// <summary>
/// 网站根文件夹物理路径(for tinyfox)
/// </summary>
// static readonly string _RootPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "site", "wwwroot");
// (for Jexus Web Server or Host in ASP.NET),如果自定义root后需要使用
static readonly string _RootPath = AppDomain.CurrentDomain.GetData(".appPath").ToString(); /// <summary>
/// 获取网站或WEB应用的根文件夹的物理路径
/// </summary>
/// <returns></returns>
public string GetRootPath()
{
return _RootPath;
}
}
}
六:MainModule的内容与作用
using System;
using System.Collections.Generic;
using System.Drawing;
using NancyMvc.Filter; namespace NancyMvc.Controller
{
public class MainModule: BaseNancyModule
{
/// <summary>
/// 构造函数
/// </summary>
public MainModule()
{ //在构造函数中进行路由配置
Get["/home"] = UserFont;
} private dynamic UserFont(dynamic arg)
{
//显示cshtml页
return View["Home/index"];
}
}
}
七:BaseNancyModule 的内容与作用
using System;
using System.Collections.Generic;
using System.Linq;
using Nancy; namespace NancyMvc.Filter
{
public class BaseNancyModule: NancyModule
{
public BaseNancyModule()
{
//请求之前
Before += context =>
{ return null;
}; //请求之后
After += context =>
{
context.Response.ContentType = "text/html;charset=utf-8";
};
}
}
}
八:MyStatusHandler
using Nancy;
using Nancy.ErrorHandling;
using Nancy.ViewEngines; namespace NancyMvc.Handler
{
/// <summary>
/// 自定义http status处理类
/// </summary>
public class MyStatusHandler : IStatusCodeHandler
{
private IViewRenderer viewRenderer;
public MyStatusHandler(IViewRenderer viewRenderer)
{
this.viewRenderer = viewRenderer;
}
/// <summary>
/// 具体处理过程
/// </summary>
/// <param name="statusCode"></param>
/// <param name="context"></param>
public void Handle(HttpStatusCode statusCode, NancyContext context)
{
var response = viewRenderer.RenderView(context, "Status/404");
response.StatusCode = statusCode == HttpStatusCode.NotFound ? HttpStatusCode.OK : statusCode;
context.Response = response;
}
/// <summary>
/// 当前状态是否需要自己处理
/// </summary>
/// <param name="statusCode"></param>
/// <param name="context"></param>
/// <returns></returns>
public bool HandlesStatusCode(HttpStatusCode statusCode, NancyContext context)
{
//return false;
return (statusCode == HttpStatusCode.NotFound
//|| statusCode == HttpStatusCode.ServiceUnavailable
//|| statusCode == HttpStatusCode.InternalServerError
);
}
}
}
九:Adapter
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Microsoft.Owin.Builder; namespace NancyMvc
{
class Adapter
{
static Func<IDictionary<string, object>, Task> _owinApp; /// <summary>
/// 默认构造函数
/// </summary>
public Adapter()
{
var builder = new AppBuilder();
var startup = new Startup();
startup.Configuration(builder);
_owinApp = builder.Build(); }
/// <summary>
/// *** JWS所需要的关键函数 ***
/// </summary>
/// <param name="env">新请求的环境字典,具体内容参见OWIN标准</param>
/// <returns>返回一个正在运行或已经完成的任务</returns>
public Task OwinMain(IDictionary<string, object> env)
{
//如果为空
if (_owinApp == null) return null; //将请求交给Microsoft.Owin处理
return _owinApp(env);
}
}
}
十:Startup
using Owin; namespace NancyMvc
{
public class Startup
{
public void Configuration(IAppBuilder builder)
{
builder.UseNancy();
}
}
}
十一:配置properties

启动外部程序是tinyfox的包 下载地址http://linuxdot.net/down/tinyfox-2.3.tar.gz)
命令行参数中的 -p 8083是你配置的端口号 -root 后面的是你当前项目的位置,不需要配到bin

本文章主要参考来源 http://www.cnblogs.com/gaobing/p/4969581.html
Nancy 搭建的更多相关文章
- 使用Nancy搭建简单的Http服务的示例demo
刚刚接触Nancy没几天,暂时还不会使用Nancy来做web开发,只是使用Nancy实现了一个简单的Http服务的Demo程序,实现对Post和Get请求的处理. Demo的示例代码地址如下:http ...
- .NET轻量级MVC框架:Nancy入门教程(二)——Nancy和MVC的简单对比
在上一篇的.NET轻量级MVC框架:Nancy入门教程(一)——初识Nancy中,简单介绍了Nancy,并写了一个Hello,world.看到大家的评论,都在问Nancy的优势在哪里?和微软的MVC比 ...
- Nancy和MVC的简单对比
Nancy和MVC的简单对比 在上一篇的.NET轻量级MVC框架:Nancy入门教程(一)——初识Nancy中,简单介绍了Nancy,并写了一个Hello,world.看到大家的评论,都在问Nancy ...
- Nancy简单实战之NancyMusicStore(一):准备工作和搭建项目
开发环境 OS : Windows 10 10.0.14393 IDE : Visual Studio 2015 Community With Update 3 Database : PostgreS ...
- .NET轻量级MVC框架:Nancy入门教程(一)——初识Nancy
当我们要接到一个新的项目的时候,我们第一时间想到的是用微软的MVC框架,但是你是否想过微软的MVC是不是有点笨重?我们这个项目用MVC是不是有点大材小用?有没有可以替代MVC的东西呢?看到这里也许你会 ...
- Nancy 框架
Nancy 框架 Nancy 框架 1.是一个轻量级用于构建http相应的web框架: 2.与mvc类似,有自己的路由机制: 3.可以处理 DELETE , GET , HEAD , OPTIO ...
- Nancy 框架学习
Nancy 框架 1.是一个轻量级用于构建http相应的web框架: 2.与mvc类似,有自己的路由机制: 3.可以处理 DELETE , GET , HEAD , OPTIONS , POS ...
- Nancy入门
Nancy入门 当我们要接到一个新的项目的时候,我们第一时间想到的是用微软的MVC框架,但是你是否想过微软的MVC是不是有点笨重?我们这个项目用MVC是不是有点大材小用?有没有可以替代MVC的东西呢? ...
- Nancy简单实战之NancyMusicStore(六):写在最后
前言 由于公司搬家后,住的地方离上班的地方远了N倍,以前是走路十多分钟就可以到公司的,上班时间也从9:00提早到8:30 现在每天上班都是先坐公交,然后再坐地铁,在这段路上比较浪费时间而且每天都是要6 ...
随机推荐
- 高性能 TCP & UDP 通信框架 HP-Socket v3.2.3 正式宣布
HP-Socket 是一套通用的高性能 TCP/UDP 通信框架,包括服务端组件.client组件和 Agent 组件.广泛适用于各种不同应用场景的 TCP/UDP 通信系统,提供 C/C++.C#. ...
- 密码算法详解——Simon
0 Simon简介 详细文档请直接阅读参考文献[1]. Simon是由NSA设计的轻量级分组密码算法(LIGHTWEIGHT BLOCK CIPHER).主要应用于硬件或软件条件受限(例如:芯片面积要 ...
- How to close existing connections to a DB
use master ALTER DATABASE YourDatabase SET SINGLE_USER WITH ROLLBACK IMMEDIATE --do you stuff here A ...
- Java RMI 学习笔记
概况 功能:提供了客户辅助对象和服务辅助对象,为客户辅助对象创建和服务辅助对象形同的方法. 优点:客户不必写任何网络或I/O代码,调用远程方法就和运行在客户自己的本地JVM上对对象进行的正常方法一样. ...
- [key]严重: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener(Spring配置异常)
详细错误为: 严重: Exception sending context initialized event to listener instance of class org.springframe ...
- C# 知识点记录(持续更新中)
从看C#入门经典开始系统的学习C#,本文主要记录学习过程中的一些知识点,也是我博客生涯的开始,比较重要成体系的部分会单重新写文章整理归纳. 1.一字不变的字符串 @字符 使转义序列不被处理,按照原样输 ...
- 为什么用户主目录下.bash_profile没有自动执行
请注意 一般登录当前用户后 .bash_profile会自动运行 如果不自动运行请查看是不是切换用户的时候使用的su 用户名而不是su - 用户名 添加中间这个 - 后 会除了切换用户外还会加载该用户 ...
- 最大流算法----(SAP 和 EK)
EK算法的核心 反复寻找源点 s 到汇点 t 之间的增广路径,若有,找出增广路径上每一段的最小值delta,若无,则结束. 寻找增广路径时用BFS来找,并且更新残留网的值. 找到delta后,则使最大 ...
- Linux网络管理——linux网络配置
2. linux网络配置 .note-content {font-family: "Helvetica Neue",Arial,"Hiragino Sans GB&quo ...
- 第一个只出现一次的字符,josephus环,最大子数组和
#include<stdio.h> #include<stdlib.h> #include<string.h> #define MAXINT 0x7fffffff ...