zoukankan      html  css  js  c++  java
  • 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 Nancy
    Install-Package Nancy.Owin
    Install-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中;

      

  • 相关阅读:
    文件操作回顾
    数据类型回顾
    面向对象三大特性之封装与多态
    面向对象之继承
    轮播图
    jQuery事件操作
    jQuery动画效果
    jQuery篇
    文档对象模型
    javascript
  • 原文地址:https://www.cnblogs.com/spaceud/p/4974969.html
Copyright © 2011-2022 走看看