一:创建一个空项目

二:安装模板

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 寄宿OWin的更多相关文章

  1. 用Web api /Nancy 通过Owin Self Host简易实现一个 Http 服务器

    过去做 端游的Http 服务器 用的WebApi 或者Mvc架构,都是放在iis...而我已经是懒出一个地步,并不想去配iis,或者去管理iis,所以我很喜欢 Self host 的启动方式. C#做 ...

  2. Nancy 寄宿IIS

    一:简介 Nancy是一个轻量级的独立的框架,下面是官网的一些介绍: Nancy 是一个轻量级用于构建基于 HTTP 的 Web 服务,基于 .NET 和 Mono 平台,框架的目标是保持尽可能多的方 ...

  3. Nancy之基于Nancy.Owin的小Demo

    前面做了基于Nancy.Hosting.Aspnet和Nancy.Hosting.Self的小Demo 今天我们来做个基于Nancy.Owin的小Demo 开始之前我们来说说什么是Owin和Katan ...

  4. Nancy之基于Nancy.Hosting.Aspnet的小Demo

    近来学习了一下Nancy这个框架,感觉挺好用的,就写篇简单的文章记录一下大致用法,由于是刚接触,写的代码 可能不规范,也没有具体的分层..莫吐槽... Nancy的官网:http://nancyfx. ...

  5. Nancy之基于Self Hosting的补充小Demo

    前面把Hosting Nancy with ASP.NET.Self Hosting Nancy和Hosting Nancy with OWIN 以demo的形式简单描述了一下. 这篇是为Self H ...

  6. [转]NancyFx/Nancy

    本文转自:https://github.com/NancyFx/Nancy/wiki/Documentation Getting Started Introduction Exploring the ...

  7. WebApiThrottle限流框架使用手册

    阅读目录: 介绍 基于IP全局限流 基于IP的端点限流 基于IP和客户端key的端点限流 IP和客户端key的白名单 IP和客户端key自定义限制频率 端点自定义限制频率 关于被拒请求的计数器 在we ...

  8. 【原生态跨平台:ASP.NET Core 1.0(非Mono)在 Ubuntu 14.04 服务器上一对一的配置实现-篇幅1】

    鸡冻人心的2016,微软高产年. build 2016后 各种干货层出不穷. 1 Win10 集成了bash  ,实现了纳德拉的成诺,Microsoft Love Linux!!! 2 跨平台  ,收 ...

  9. asp net core 跨平台初体验

    标: 在 ubuntu 16.04 上部署一个 asp.net core 站点,打开网站后显示一段文字.   安装 net core 运行环境:ubuntu 16.04 LTS 1.添加 apt 源 ...

随机推荐

  1. Git常用命令总结(超实用)【转】

    转自:https://www.linuxprobe.com/git-common-commands.html 本文由LinuxProbe.Com团队成员逄增宝整理发布,原文来自:Linux就这么学. ...

  2. Linux信号-信号集&信号屏蔽字&捕捉信号【转】

    转自:https://blog.csdn.net/Lycorisradiata__/article/details/80096203 一. 阻塞信号 1. 信号的常见其他概念    实际执行信号的处理 ...

  3. git-bisect last updated in 2.19.1【转】

    转自:https://git-scm.com/docs/git-bisect NAME git-bisect - Use binary search to find the commit that i ...

  4. webstorm加载项目卡死在scanning files to index

    今天用webstorm导入项目时,需要加载node-modules文件夹,导致webstorm非常卡,页面提示scanning files to index... 网上搜到办法,记录下: 说明: 在n ...

  5. Openssl源代码整理学习---含P7/P10/P12说明

    声明:建议结合Openssl源代码学习: 一.基础知识 1.Openssl 简史 OpenSSL项目是加拿大人Eric A.Yang 和Tim J.Hudson开发,现在有Openssl项目小组负责改 ...

  6. 《Spring5官方文档》新功能(4,3)

    <Spring5官方文档>新功能 原文链接 译者:supriseli Spring框架的新功能 这一章主要提供Spring框架新的功能和变更. 升级到新版本的框架可以参考.Spring g ...

  7. android系统下消息推送机制

    一.推送方式简介: 当前随着移动互联网的不断加速,消息推送的功能越来越普遍,不仅仅是应用在邮件推送上了,更多的体现在手机的APP上.当我们开发需要和服务器交互的应用程序时,基本上都需要获取服务器端的数 ...

  8. DecimalFormat详解

    DecimalFormat继承自NumberFormat,可以使用它将十进制的数以不同形式格式化为字符串形式,可以控制前导和尾随0.前缀.后缀.分组(千).小数分隔符等,如果要更改格式符号(例如小数点 ...

  9. R-CNN,SPP-NET, Fast-R-CNN,Faster-R-CNN, YOLO, SSD系列

    就是想保存下来,没有其他用意 原博文:http://blog.csdn.net/qq_26898461/article/details/53467968 3. 空间定位与检测     参考信息< ...

  10. 解决 安装或卸载软件时报错Error 1001 的问题

    卸载或安装程序时出错1001:错误1001可能发生在试图更新.修复或卸载windows os中的特定程序时.此问题通常是由于程序的先前安装损坏而引起的. 错误“1001”通常会遇到,因为程序的先前安装 ...