Nancy的基本用法
在前面的文章轻量级的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的基本用法的更多相关文章
- Nancy异步用法
个人笔记,记录Nancy异步用法 基类,所有请求都将首先执行该类,并执行Before事件 namespace CxyAdvert.Base { public class BaseNancyModel ...
- Nancy之基于Nancy.Hosting.Aspnet的小Demo
近来学习了一下Nancy这个框架,感觉挺好用的,就写篇简单的文章记录一下大致用法,由于是刚接触,写的代码 可能不规范,也没有具体的分层..莫吐槽... Nancy的官网:http://nancyfx. ...
- Nancy之ModelBinding(模型绑定)
过年前的最后一篇博客,决定留给Nancy中的ModelBinding 还是同样的,我们与MVC结合起来,方便理解和对照 先来看看MVC中简单的ModelBinding吧 // POST: Author ...
- Nancy之Pipelines三兄弟(Before After OnError)
一.简单描述 Before:如果返回null,拦截器将主动权转给路由:如果返回Response对象,则路由不起作用. After : 没有返回值,可以在这里修改或替换当前的Response. OnEr ...
- Nancy之区域和分部视图的使用
一.前言 在MVC中,区域(Area)和分部视图(PartialView)应该是我们用的十分频繁的两个东西 今天我们就在Nancy中,把这两个东西简单的用起来! 二.简单使用之区域 区域,无论是对 ...
- Nancy之Forms authentication的简单使用
一.前言 想必大家或多或少都听过微软推出的ASP.NET Identity技术,可以简单的认为就是一种授权的实现 很巧的是,Nancy中也有与之相类似的技术Authentication,这两者之间都用 ...
- Nancy之文件上传与下载
零.前言 由于前段时间一直在找工作,找到工作后又比较忙,又加班又通宵的赶项目,所以博客有段时间没有更新了. 今天稍微空闲一点,碰巧前几天看到有园友问我Nancy中下载文件的问题,然后就趁着休息的时间写 ...
- 浅析如何在Nancy中使用Swagger生成API文档
前言 上一篇博客介绍了使用Nancy框架内部的方法来创建了一个简单到不能再简单的Document.但是还有许许多多的不足. 为了能稍微完善一下这个Document,这篇引用了当前流行的Swagger, ...
- 谈谈Nancy中让人又爱又恨的Diagnostics【上篇】
前言 在Nancy中有个十分不错的功能-Diagnostics,可以说这个功能让人又爱又恨. 或许我们都做过下面这样的一些尝试: 记录某一个功能用到的相关技术信息 记录下网站的访问记录 全局配置某些框 ...
随机推荐
- jxoi2017
题解: 并不知道题目顺序就按照难度排序了 [JXOI2017]加法 这是一道很简单的贪心 最小值最大二分答案 然后我们可以从左向右考虑每一个位置 如果他还需要+A 我们就从能覆盖它的区间中挑一个最右的 ...
- python之工作目录和文件引用
1.参考 如何获得Python脚本所在目录的位置 Python 相对导入与绝对导入 还没细看 2.不考虑exe打包 sys.path[0] #顶层运行脚本的绝对目录 os.path.split(os. ...
- zabbix邮箱报警设置&问题汇总
zabbix邮件报警部署! Zabbix监控服务端.客户端都已经部署完成,被监控主机已经添加,Zabiix监控运行正常,通过查看Zabbix监控服务器,可以了解服务器的运行状态是否正常,运维人员不会时 ...
- Codeforces 868F Yet Another Minimization Problem 决策单调性 (看题解)
Yet Another Minimization Problem dp方程我们很容易能得出, f[ i ] = min(g[ j ] + w( j + 1, i )). 然后感觉就根本不能优化. 然后 ...
- sql语句表示不等于
<> != 后面均不带引号“”
- jquery模拟form表单提交并新打开页面
/** * form表单提交本页面打开 * @param url * @param params */ function postCurrent(url,params){ var form = $(& ...
- scala-Unit-3-Scala基础语法2
一.定义方法.函数.及方法转换为函数 1.方法的定义: def 方法名(参数1:数据类型,参数2:数据类型...):返回值类型 ={ } 2.定义函数: val h1 = (a:Int,b:Int) ...
- Java 之 XML
1.XML a.定义:可扩展标记语言 b.用途:现在主要用来以一种格式化的形式来存储数据 c.注意:XML中是区分大小写的 2.DTD a.定义:文档类型定义 b.作用:定义 XML 文档的合法构建模 ...
- 笔记-JS高级程序设计-变量,作用域和内存问题
1在将一个值赋给变量时,解析器必须确认这个值是基本类值还是引用类型值,基本类型值是按值访问的,可以操作保存在在变量中的实际值,引用类型是保 存在内存中的对象,JS不允许直接访问内存中的位置,所以实际操 ...
- 大数据技术 - 分布式文件系统 HDFS 的设计
本章内容介绍下 Hadoop 自带的分布式文件系统,HDFS 即 Hadoop Distributed Filesystem.HDFS 能够存储超大文件,可以部署在廉价的服务器上,适合一次写入多次读取 ...