Nancy 宿主于asp.net(一)

    Nancy是.net下微型mvc框架,是一个轻量级的,用于构建基于http的web服务。

Nancy 设计用于处理 DELETE, GET, HEAD, OPTIONS, POST, PUT 和 PATCH 等请求方法,并提供简单优雅的 DSL 以返回响应。

官方地址:http://nancyfx.org/

Github : https://github.com/NancyFx/Nancy

quick start

0、特点

1、跨平台运行,Nancy支持运行在ASP.NET/IIS,WCF,自宿主和任何OWIN;

2、小型项目,不想使用iis这样繁重的服务器,避免繁重的身份验证等;

3、定义了非常轻量的 DELETE, GET, HEAD, OPTIONS, POST, PUT 和 PATCH 等请求;

4、集成了各种模板引擎(Razor, Spark, dotLiquid 和自带的SuperSimpleViewEngine);

5、强大的请求路径匹配,包括先进的参数功能。路径匹配策略可以使用自定义实现您的各种具体需求;

1、创建空白mvc4项目

2、nuget引入相应的包

image

Nancy--Nancy主要框架

Nancy.Hosting.Aspnet--用于将Nancy宿主于asp.net

Nancy.Viewengines.Razor--结合Razor引擎进行视图渲染

引入完成之后,自动在配置文件中做如下修改:

<!--system.web节点下添加-->
<httpHandlers>
  <add verb="*" type="Nancy.Hosting.Aspnet.NancyHttpRequestHandler" path="*" />
 </httpHandlers>
<!--handlers节点下添加-->
<add name="Nancy" verb="*" type="Nancy.Hosting.Aspnet.NancyHttpRequestHandler" path="*" />

注意点:此处将url处理转交给Nancy进行处理,但是我在mvc框架的基础上进行的Nancy的引入,所以需要将原有的mvc框架的路由注释掉,即global.asax中的路由注册;

3、项目结构

image

就像普通的mvc项目结构一样,该如何创建就如何创建,不用在项目结构上有思维上的跳跃性,当然Nancy并未严格要求文件结构的命名规则,使用人可以自定义其他名称的结构也是可以正常运行的,当然了,既然有了前期mvc的思想,我们就没必要自己再定义一套。

4、demo初探

using Nancy;

namespace NancyDemo.Controllers
{
    /// <summary>
    /// NancyModule:承担了mvc中路由和action的工作
    /// 传统mvc中的controller在此赋予了额外的路由工作
    /// </summary>
    public class HomeController : NancyModule
    {
        public HomeController()
        {
            //localhost:port/
            Get["/"] = p =>
            {
                return "hello Nancy!";
            };
            Get["/Home"] = p =>
            {
                return View["Home"];
            };
            Get["/Home/{userName}"] = p =>
            {
                return p.userName;
            };
        }
    }
}

5、运行效果

浏览器输入相应地址:

http://localhost:17983/

image

http://localhost:17983/Home

image

http://localhost:17983/Home/Welcome To Nancy

image

6、Nancy预览

1、通过反编译工具我们可以看到,Nancy为我们封装了基本的http请求和响应。

2、同时对DELETE, GET, HEAD, OPTIONS, POST, PUT 和 PATCH 方法进行了进一步的封装。

3、对原有的mvc的东西进行保留,二次封装。

4、将iis中的管道的概念同样进行了封装,对应的AfterPipeLine 和BeforePipeline类。

image

结束语:

以上是个人对Nancy的初探,结合博客中博主的观点和自己的实践,之后会对Nancy有跟进的叙述。

posted @ 2015-11-18 22:09  zhanfuShi  阅读(1007)  评论(0编辑  收藏  举报