一、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,这个模板包含的东东比较全。