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

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM