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中;

      

  • 相关阅读:
    ubuntu 制做samba
    《Programming WPF》翻译 第4章 前言
    《Programming WPF》翻译 第4章 3.绑定到数据列表
    《Programming WPF》翻译 第4章 4.数据源
    《Programming WPF》翻译 第5章 6.触发器
    《Programming WPF》翻译 第4章 2.数据绑定
    《Programming WPF》翻译 第4章 1.不使用数据绑定
    《Programming WPF》翻译 第5章 7.控件模板
    《Programming WPF》翻译 第5章 8.我们进行到哪里了?
    《Programming WPF》翻译 第5章 5.数据模板和样式
  • 原文地址:https://www.cnblogs.com/spaceud/p/4974969.html
Copyright © 2011-2022 走看看