在前面的文章轻量级的Web框架——Nancy中简单的介绍了一下Nancy的特点,今天这里就介绍下它的基本用法,由于2.0的版本还是预览状态,我这里用的是1.4版本,和最小的版本API还是有些差异的。

模块

Nancy的模块的概念类似于Asp.net中的Controller,一个典型的示例如下:

public class Module : NancyModule
{
public Module()
{
Get["/greet"] = x => "hello world";
}
}

它定义了一个模块,并且定义了该模块下的一个Get操作。Nacy的模块需要继承自NancyModule ,服务器启动时默认会通过反射加载所有程序集下的NancyModule,包括各个dll中的程序集。

如果要实现动态加载别的程序集下的模块,初始化的时候使用Assembly.LoadFile之类的方法将其程序集加载即可。

Assembly.LoadFile(Path.GetFullPath(@".\WebModules.dll"));

操作

在模块中定义操作的基本用法如下:

Get["/greet"] = x => "hello world";

我们访问http://xxxx/greet的时候,就可以看到hello world字样。可以看出,每个模块中,对于Get,Post,Put及Delete等基本操作都定义了一个字典,类型为RouteBuilder,在RouteBuilder中定义了各种操作。

路由

默认情况下,RouteBuilder的key值定义的是绝对路径,例如

Get["/greet"] = x => "hello world";
定义的路由就是/greet。非常直接,

父路由

如果Module下的操作比较多,我们往往会将其设计为放在统一的父路由底下。如果每一个都定义一个父路由显得比较繁琐,此时,可以通过在Module中定义父亲路由的方式解决此问题。

public class ResourceModule : NancyModule
{
public ResourceModule() : base("/products")
{
//此时的路径就是 /products/list
Get["/list"] = _ => "The list of products";
}
}

参数传递

我们可以使用类似Asp.net类似的路由方式传递参数:

Get["/greet/{name}"] = para => $"Hello {para.name}";

参数是通过一个dynamic对象传递给该路由的操作行为的,每个参数都是该对象的一个属性值。可以通过 /greet/abc类似的路径查看访问结果。

但是,有时我们想要通过QueryString传递参数,如 /greet?name=abc, 此时可以通过Request.Query获取查询字符串。示例如下:

public class Module : NancyModule
{
public Module()
{
Get["/greet"] = para =>
{
var name = Request.Query["name"];
return $"Hello {name}";
};
}
}

返回值

前面的示例我们的操作都是返回一个字符串,但这种方式对于复杂对象来说是不够用的,此时我们就需要用到Nancy的标准返回值对象Response了。

public class Module : NancyModule
{
public Module()
{
Get["/image"] = x =>
{
var data = File.ReadAllBytes(@"r:\123.jpg");
return new Response
{
ContentType = "image/jpg",
Contents = s => s.Write(data, , data.Length)
};
};
}
}

Nancy的基本用法的更多相关文章

  1. Nancy异步用法

    个人笔记,记录Nancy异步用法 基类,所有请求都将首先执行该类,并执行Before事件 namespace CxyAdvert.Base { public class BaseNancyModel ...

  2. Nancy之基于Nancy.Hosting.Aspnet的小Demo

    近来学习了一下Nancy这个框架,感觉挺好用的,就写篇简单的文章记录一下大致用法,由于是刚接触,写的代码 可能不规范,也没有具体的分层..莫吐槽... Nancy的官网:http://nancyfx. ...

  3. Nancy之ModelBinding(模型绑定)

    过年前的最后一篇博客,决定留给Nancy中的ModelBinding 还是同样的,我们与MVC结合起来,方便理解和对照 先来看看MVC中简单的ModelBinding吧 // POST: Author ...

  4. Nancy之Pipelines三兄弟(Before After OnError)

    一.简单描述 Before:如果返回null,拦截器将主动权转给路由:如果返回Response对象,则路由不起作用. After : 没有返回值,可以在这里修改或替换当前的Response. OnEr ...

  5. Nancy之区域和分部视图的使用

    一.前言 在MVC中,区域(Area)和分部视图(PartialView)应该是我们用的十分频繁的两个东西 今天我们就在Nancy中,把这两个东西简单的用起来!   二.简单使用之区域 区域,无论是对 ...

  6. Nancy之Forms authentication的简单使用

    一.前言 想必大家或多或少都听过微软推出的ASP.NET Identity技术,可以简单的认为就是一种授权的实现 很巧的是,Nancy中也有与之相类似的技术Authentication,这两者之间都用 ...

  7. Nancy之文件上传与下载

    零.前言 由于前段时间一直在找工作,找到工作后又比较忙,又加班又通宵的赶项目,所以博客有段时间没有更新了. 今天稍微空闲一点,碰巧前几天看到有园友问我Nancy中下载文件的问题,然后就趁着休息的时间写 ...

  8. 浅析如何在Nancy中使用Swagger生成API文档

    前言 上一篇博客介绍了使用Nancy框架内部的方法来创建了一个简单到不能再简单的Document.但是还有许许多多的不足. 为了能稍微完善一下这个Document,这篇引用了当前流行的Swagger, ...

  9. 谈谈Nancy中让人又爱又恨的Diagnostics【上篇】

    前言 在Nancy中有个十分不错的功能-Diagnostics,可以说这个功能让人又爱又恨. 或许我们都做过下面这样的一些尝试: 记录某一个功能用到的相关技术信息 记录下网站的访问记录 全局配置某些框 ...

随机推荐

  1. 3998: [TJOI2015]弦论

    题解: 每个点的size值就是这个从根-它出现的次数 如果相同只算一次就全部赋值为1就可以了 代码: #include <bits/stdc++.h> #define ll long lo ...

  2. u盘系统安装步骤

    应今天Webcast听众的要求,写一写从U盘安装Windows 7的必要步骤.步骤一:准备U盘   把容量在4GB以上的U盘插入计算机,在命令行运行下列命令,完成U盘的分区格式化.   diskpar ...

  3. 将xml 写到内存中再已string类型读出来

    System.IO.MemoryStream ms = new System.IO.MemoryStream(); xmlDoc.Save(ms); System.IO.StreamReader sr ...

  4. Django的MVT模型

    MVC模型和MVT模型 MVC简介: MVC的全拼为Model-View-Controller,最早由TrygveReenskaug在1978年提出,是施乐帕罗奥多研究中心(Xerox PARC)在2 ...

  5. JS变量声明方式

    在JavaScript中有三种声明变量的方式:const  var let const:用于声明常量.注意:定义的变量的时候,必须同时初始化,且其值之后不可以修改. var:最常用的声明变量关键字.  ...

  6. react+typescript报错集锦<持续更新>

    typescript报错集锦 错误:Import sources within a group must be alphabetized.tslint(ordered-imports) 原因:impo ...

  7. Wan Android 项目总结

    Wan Android 项目总结 项目的由来 这个项目也算是自己学习了一段时间的Android以后的一个总结和学习吧,项目采用了Kotlin语言,Api采用的hongyang大神的WanAndroid ...

  8. C#循环语句整理

    for.while.do while和switch暂时没发现与c++的不同,这里只整理foreach. foreach foreach的作用是遍历集合中的所有元素.foreach语句中的表达式由关键字 ...

  9. staff

    staff英 [stɑ:f] 四大服. 美 [stæf] n.参谋;全体职员;管理人员;权杖adj.职员的;行政工作的;参谋的;作为正式工作人员的v.在…工作;为…配备职员;任职于第三人称单数: st ...

  10. UOJ.35.[模板]后缀排序(后缀数组 倍增)

    题目链接 论找到一个好的教程的正确性.. 后缀数组 下标从1编号: //299ms 2560kb #include <cstdio> #include <cstring> #i ...