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 NancyInstall-Package Nancy.OwinInstall-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

时间: 2024-10-07 07:45:33

Nancy 框架的相关文章

记一次Nancy 框架中遇到的坑

记一次Nancy 框架中遇到的坑 前几天,公司一个项目运行很久的Nancy框架的网站,遇到了一个很诡异的问题.Session 对象跳转到另外一个页面的时候,session对象被清空了,导致用户登录不上.搞了两天,终于解决了.于是把它记录下来,以避免其他人也碰到这种情况. 起因 公司一个Nancy 框架 开发的web网站,以前一直都是好的,nancy 框架也用在了很多项目里面,基本上已经很成熟很稳定了,但是在前几天发布某个web网站的时候,竟然出现部分用户登录不上的情况.刚开始以为是人员的权限有问

ASP.NET Core开发-使用Nancy框架

Nancy简介 Nancy是一个轻量级的独立的框架,下面是官网的一些介绍: Nancy 是一个轻量级用于构建基于 HTTP 的 Web 服务,基于 .NET 和 Mono 平台,框架的目标是保持尽可能多的方式,并提供一个super-duper-happy-path所有交互. Nancy 设计用于处理 DELETE, GET, HEAD, OPTIONS, POST, PUT和 PATCH 等请求方法,并提供简单优雅的 DSL 以返回响应.让你有更多时间专注于你的代码和程序. 官方地址:http:

【框架学习】Nancy 框架

Nancy 框架 1.是一个轻量级用于构建http相应的web框架: 2.与mvc类似,有自己的路由机制: 3.可以处理 DELETE , GET , HEAD , OPTIONS , POST , PUT 和 PATCH等请求: 4.完美支持OWIN http://owin.org/(可以说他就是为OWIN而生的):博客介绍: http://kb.cnblogs.com/page/509236/ TinyFox 是一款支持OWIN标准的WEB应用的高性能的HTTP服务器,是Jexus Web

第三章 Web框架 Nancy

如果使用Nancy作为一个WEB框架而言,会有什么不同?实际上很多. 在使用Nancy框架为网页添加Rest节点和路由和之前的Rest框架中是相同的,这方面没有什么需要学习的了.Nancy采用一贯的处理方式, 通过一些模块化的组件进行扩充功能,使得更加适合开发一个完整的WEB站点. Nancy非常适合提供基于自定义路由的静态文件和基于数据的视图(就像ASP.NET MVC),事实上,你甚至可以去定义一个引用的别名或路由来指向已经存在的特定静态文件,而不是动态生成一个. 请参见以下示例. 想象在N

轻量级MVC框架:Nancy学习

一.认识Nancy 今天听讲关于Nancy框架的培训,被Nancy的易用性所吸引.故晚上回来梳理了一下知识. 什么是Nancy呢?如标题所述,Nancy是一个轻量级的独立的框架: Nancy 是一个轻量级用于构建基于 HTTP 的 Web 服务,基于 .NET 和 Mono 平台. Nancy 设计用于处理 DELETE, GET, HEAD, OPTIONS, POST, PUT 和 PATCH 等请求方法,并提供简单优雅的 DSL 以返回响应. Nancy和Asp.net MVC原理相似,但

NancyFx 2.0的开源框架的使用-HosingOwin

Nancy框架的Owin使用 先建一个空的Web项目 然后往Nuget库里面添加Nancy包 Nancy Nancy.Owin Nancy.ViewEnglines.Spark 然后添加Models,Module,Views三个文件夹 往Models文件夹里面添加Index类 public string StatusMessage { get; set; } 然后往Module文件夹里面添加MainModule类 public MainModule() { Get("",Lexan=&

Nancy.Net之旅-初次见面

.cb-title { background-color: #abe3fe; height: 50px; line-height: 50px; padding-left: 10px } .cb-body { padding-left: 11px; border-left: 2px solid #abe3fe } Welcome Nancy 首先,欢迎来到Nancy!我们的主要灵感是Ruby的Sinatra框架,因此Nancy以Frank Sinatra的女儿名字命名.许多人想知道NancyFx中

简单的接口框架

日常开发中经常会用到接口,传输都基于http,.net下有简单的ashx或aspx等搭载接口或MVC下的WebApi,或Wcf等.. 之前开发中用到了Web轻型框架:Nancy,Json序列化工具ServiceStack.Text,于是将两者结合下构造一个我自己的小接口框架 一.服务端抽象 先上5个基本抽象类和接口 1.请求基类:可包含一些账户等信息 public class RequestBase { } 2.响应基类:包括响应状态 public class ResponseBase { pu

浅析如何在Nancy中使用Swagger生成API文档

原文:浅析如何在Nancy中使用Swagger生成API文档 前言 上一篇博客介绍了使用Nancy框架内部的方法来创建了一个简单到不能再简单的Document.但是还有许许多多的不足. 为了能稍微完善一下这个Document,这篇引用了当前流行的Swagger,以及另一个开源的Nancy.Swagger项目来完成今天的任务! 注:Swagger是已经相对成熟的了,但Nancy(2.0.0-clinteastwood)和Nancy.Swagger(2.2.6-alpha)是基于目前的最新版本,但目