zoukankan      html  css  js  c++  java
  • Nancy 学习-自宿主 继续跨平台

    Nancy简介

    Nancy是一个轻量级的独立的框架,下面是官网的一些介绍:

    • Nancy 是一个轻量级用于构建基于 HTTP 的 Web 服务,基于 .NET 和 Mono 平台,框架的目标是保持尽可能多的方式,并提供一个super-duper-happy-path所有交互。
    • Nancy 设计用于处理 DELETEGETHEADOPTIONSPOSTPUT和 PATCH 等请求方法,并提供简单优雅的 DSL 以返回响应。让你有更多时间专注于你的代码和程序。

    官方地址:http://nancyfx.org   GitHub:https://github.com/NancyFx/Nancy

    创建Nancy项目(自宿主)

      Nancy supports running on ASP.NET/IIS, WCF, Self-hosting and any OWIN 

    Nancy是支持多种宿主,今天我是采用 Self-hosting 也就是自宿主方式。

    首先创建一个控制台程序:

    然后添加Nuget 引用,我们在搜索框输入Nancy Self,然后搜索,如图:

     

    直接添加第一个即可。

    也可以用Nuget命令行添加:Install-Package Nancy.Hosting.Self

    添加好以后,在Program.cs 添加如下代码:

    using Nancy.Hosting.Self;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace NancyDemo
    {
        class Program
        {
            static void Main(string[] args)
            {
                using (var host = new NancyHost(new Uri("http://localhost:9000")))
                {
                    host.Start();
                    Console.ReadLine();
                }
            }
        }
    }

     然后启动程序,访问 http://localhost:9000 发现404 错误,那是因为我们还没添加任何Module。

    下面我们添加一个HomeModule

    如图:

        public class HomeModule:NancyModule
        {
            public HomeModule() 
            {
                Get["/"] = r =>
                {
                    var os = System.Environment.OSVersion;
                    return "Hello Nancy<br/> System:"+os.VersionString;
                };
            }
        }

     再次启动访问 http://localhost:9000

    下面我们再来添加一些强大的路由规则:

    Get["/blog/{name}"] = r => {
                    return "blog name " + r.name;
                };

    然后我们访问 http://localhost:9000/blog/linezero  ,name就可以获取到linezero

    我们再来模仿mvc 的路由规则:

                Get["/mvc/{controller}/{action}/{id}"] = r => {
                    StringBuilder mvc = new StringBuilder();
                    mvc.AppendLine("controller :" + r.controller+"<br/>");
                    mvc.AppendLine("action :" + r.action + "<br/>");
                    mvc.AppendLine("id :" + r.id + "<br/>");
                    return mvc.ToString();
                };

    我们访问:http://localhost:9000/mvc/blog/linezero/1

    分别对应如下:

    controller :blog
    action :linezero
    id :1

     更多功能可以参看官方wiki。

    完整Module代码:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using Nancy;
    
    namespace NancyDemo
    {
        public class HomeModule:NancyModule
        {
            public HomeModule() 
            {
                Get["/"] = r =>
                {
                    var os = System.Environment.OSVersion;
                    return "Hello Nancy<br/> System:"+os.VersionString;
                };
    
                Get["/blog/{name}"] = r => {
                    return "blog name " + r.name;
                };
    
                Get["/mvc/{controller}/{action}/{id}"] = r => {
                    StringBuilder mvc = new StringBuilder();
                    mvc.AppendLine("controller :" + r.controller+"<br/>");
                    mvc.AppendLine("action :" + r.action + "<br/>");
                    mvc.AppendLine("id :" + r.id + "<br/>");
                    return mvc.ToString();
                };
            }
        }
    }
    View Code

    跨平台

     前面一篇 http://www.cnblogs.com/linezero/p/5087997.html OWIN 跨平台。

    Nancy is a lightweight, low-ceremony, framework for building HTTP based services on .NET and Mono. 

    官方介绍是可以直接运行在mono上。所以下面我们就来看看一下运行在linux下。首先大家要安装好 mono。

    测试系统版本:centos 6.4  mono 3.10.0

     

    将程序上传到linux 下,然后定位到程序目录,通过命令启动程序:mono NancyDemo.exe

    程序已成功启动,下面我来访问看看:

    可以看到系统标示已经是Linux。

     参考链接:

    http://www.cnblogs.com/shanyou/archive/2013/04/11/3015654.html

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

    如果你觉得本文对你有帮助,请点击“推荐”,谢谢。

  • 相关阅读:
    C#操作REDIS例子
    A C# Framework for Interprocess Synchronization and Communication
    UTF8 GBK UTF8 GB2312 之间的区别和关系
    开源项目选型问题
    Mysql命令大全——入门经典
    RAM, SDRAM ,ROM, NAND FLASH, NOR FLASH 详解(引用)
    zabbix邮件报警通过脚本来发送邮件
    centos启动提示unexpected inconsistency RUN fsck MANUALLY
    rm 或者ls 报Argument list too long
    初遇Citymaker (六)
  • 原文地址:https://www.cnblogs.com/linezero/p/5121887.html
Copyright © 2011-2022 走看看