Nancy快速入门

一、Nancy是什么?

Nancy是一个基于.NET的HTTP服务的框架,它因轻量不拘小节而被广泛应用。

二、Nancy的构成

1.Nancy Modules
  • 每一个Nancy 模块继承自NancyModel类;
  • 一个模块可以使你访问当前的整个请求信息,访问请求的上下文,构建各种特殊类型的返回(string,json,xml,files,redirects等),渲染视图等。
  • 模块扫描不花费时间,这个扫描只在Nancy应用程序启动时进行,并把扫描信息缓存起来。
2.路由:
  • 使用模块创建根路由:在构造函数上: base(“/xxx”);
  • 定义路由:指定 方法+模式+行为+(可选)条件
  • 方法(HTTP 方法,DELETE/GET/HEAD/OPTIONS/POST/PUT/PATCH )
    模式
  • 模式评级 当访问/a, “/a”与”/{category}” 同时匹配,则 字面值>捕捉值
3.BootStrapper引导程序

Nancy并非一个巨无霸框架,实际上它是由很多功能碎片组合运行的。将这些碎片拼凑成一个整体,这就需要通过bootstrapper进行。

  • TinyIoC 反转控制,在bootstrapper里你可以使用自动注册机制,可以在模块构造函数参数里注入你的依赖,例如:
using Nancy;
using NancySelfHostWithRazor1.IBLL;

namespace NancySelfHostWithRazor1.Modules
{
    public class IndexModule : NancyModule
    {
        public IndexModule(Interface1 testBLL)
            : base("index")
        {
            Get["/test"] = parameters =>
            {
                return testBLL.test();
            };
        }
    }
}
4.Module的Before、 After

使你可以在单个模块中,在请求路由前后做拦截处理,拦截器会在程序运行中检查请求,若匹配到此模块路由则先执行。例如:在IndexModule中设置一个Before,返回null则不拦截继续走路由,返回其他则不走路由,直接将信息返回给客户端。
如下图,请求:localhost:3579/index ,这时就返回“报错啦”,而不会进入断点。
这里写图片描述

5.应用程序的Before,After,OnError管道

在这些拦截体里,都可以在访问路由前后做一些需要的业务:

  • Before管道拦截体 Func< NancyContext,Response>,返回null,则请求交由匹配的路由处理返回;
    返回Response,则不会交给路由,而是直接将处理结果返回给客户;

  • After管道拦截体 Action 不会返回任何信息,因为拦截体是在路由处理了请求之后,在这里你也可以更改存在的返回信息。

  • OnError管道 可以捕获被抛出的异常,并作自定义处理。
    管道一般定义在引导程序BootStrapper.cs中,如下:

using Nancy;

namespace NancySelfHostWithRazor1
{
    public class Bootstrapper : DefaultNancyBootstrapper
    {
        protected override void ApplicationStartup(Nancy.TinyIoc.TinyIoCContainer container, Nancy.Bootstrapper.IPipelines pipelines)
        {
            base.ApplicationStartup(container, pipelines);
        }

        protected override void RequestStartup(Nancy.TinyIoc.TinyIoCContainer container, Nancy.Bootstrapper.IPipelines pipelines, NancyContext context)
        {
            base.RequestStartup(container, pipelines, context);

            pipelines.BeforeRequest += (ctx) =>
            {
                //验签呀
                //写日志呀啥的
                return null;//不return则报错
            };
            pipelines.AfterRequest += (ctx) =>
            {
               //修改返回信息
                //无需return
            };
            pipelines.OnError += (ctx,ex) =>
            {
                //修改返回信息
                return null;//不return则报错
            };
        }
    }
}

如果Before或者OnError管道体中没有任何return,则会报错,例如:
这里写图片描述

三、异步

需要.NET4.5版本,不然会报错: Operator ‘+=’ cannot be applied to operands of type ‘Nancy.BeforePipeline’….

四、Nancy现成模板

支持Visual Studio2012以上版本的模板包SideWaffle. 模板官网,安装之后,重启VS,你可以在新建项目中选择一个现成的Nancy模板项目。
初次接触的童鞋可以新建Nancy with self host with Razor,这个模板包含的东东比较全。

什么是Nancy呢?如果你学习过Ruby的话,就会知道Ruby中有个框架叫做Sinatra,Nancy就是Sinatra的.Net版本。如果你感觉微软的MVC过于笨重、过于繁琐,那么Nancy可能就是你苦苦寻找的东西。Nancy是一个轻量级的独立的框架,下面是官网的一些介绍:Nancy 是一个轻量级用于构建基于 HTTP 的 Web 服务,基于 .NET 和 Mono 平台,框架的目标是保持尽可能多的方式,并提供一个super-duper-happy-path所有交互。Nancy 设计用于处理  DELETE ,  GET ,  HEAD ,  OPTIONS ,  POST ,  PUT   和 PATCH  等请求方法,并提供简单优雅的 DSL 以返回响应。Nancy和Asp.net MVC原理相似,但有自己的一套路由机制,在使用上更加易用,可以用Nancy快速开发一些网站。Nancy并不依赖任何现有的框架,所以他可以运行在任何平台上面。官方网站 http://nancyfx.org/ 更详细的介绍参见 http://blog.spinthemoose.com/2011/07/18/nancy-a-micro-web-framework-for-net/ 顺便介绍个使用Nancy 做的Quartz.net的web控制台 https://quartznetwebconsole.codeplex.com/ 参考文章:使用Nancy和Simple.Data两个轻量级的框架打造一个分布式开发系统(一)Frictionless .NET Web App Development with NancyFrictionless .NET Web App Development with Nancy Part II - Introducing a View EngineFrictionless .NET Web App Development with Nancy Part III - Introducing MongoDBFrictionless .NET Web App Development with Nancy Part IV – Hosting Slides from ANUG talk on Nancy扩展NoteService,支持NancyFx用Nancy和Simple.Data创建一个图片博客 第一部分:开始一个工程用Nancy和Simple.Data创建一个图片博客 第二部分:定义routes用Nancy和Simple.Data创建一个图片博客 第三部分:渲染一些ViewsIntegrating Nancy with protobuf-netBuild Simple Web UIs with the Nancy Framework轻量级MVC框架Nancy学习 标签:web框架
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值