NancyFX 第三章 Web框架
如果使用Nancy作为一个WEB框架而言,会有什么不同?实际上很多。
在使用Nancy框架为网页添加Rest节点和路由和之前的Rest框架中是相同的,这方面没有什么需要学习的了。Nancy采用一贯的处理方式, 通过一些模块化的组件进行扩充功能,使得更加适合开发一个完整的WEB站点。
Nancy非常适合提供基于自定义路由的静态文件和基于数据的视图(就像ASP.NET MVC),事实上,你甚至可以去定义一个引用的别名或路由来指向已经存在的特定静态文件,而不是动态生成一个。
请参见以下示例。 想象在Nancy的Bootstrapper(后面会有介绍)有以下代码
protected override void ConfigureConventions(NancyConventions
nancyConventions)
{
Conventions.StaticContentsConventions.Add(
StaticContentConventionBuilder.AddFile(
"/jquery",
"scripts/Jquery-2.1.1.min.js"));
}
然后我就可以在我添加的HTML页面或试图中这样引用这个文件
<script src="~/jquery"></script>
乍一看,这可能不像什么特别的,但如果你决定在您的网站中使用的jQuery的新版本会发生什么呢?
考虑到遍历每个页面,模板和视图,把每一处“〜/script/jquery-2.1.1.min.js”修改成“〜/script/jquery-3.0.0.min.js”(或无论新版本是什么),或者替换一个类中的单个行并重新编译,我知道我更喜欢哪一个。
不只是单个文件,您可以映射整个目录结构。 在这本书的Demo中,你会在bootstrapper代码中找到以下内容
代码列表2
protected override void ConfigureConventions(NancyConventions
nancyConventions)
{
Conventions.StaticContentsConventions.Add(
StaticContentConventionBuilder.AddDirectory("/scripts", @"Scripts"));
Conventions.StaticContentsConventions.Add(
StaticContentConventionBuilder.AddDirectory("/fonts", @"fonts"));
Conventions.StaticContentsConventions.Add(
StaticContentConventionBuilder.AddDirectory("/images", @"Images"));
Conventions.StaticContentsConventions.Add(
StaticContentConventionBuilder.AddDirectory("/", @"Pages"));
}
上面设置四个全局规则,任何请求“/scripts”都会指向Nancy编译程序所在的目录中的scripts文件夹,对于“/fonts”和“/images”也是同样的。
处理“/”的规则却是被重定向到一个名为pages的文件夹,因此请求“/home.html”将会在./pages/home.html中查找HTML内容。
我将在后面讨论视图(views)时更详细地介绍这一点,但现在,知道默认情况下你不必做任何处理。您可以创建一个名为Content的文件夹,并将所有内容放入其中;
对于那些希望把Nancy添加到项目中的开发者来说,意味着什么那?
好吧,这意味着你可以通过NuGet安装Nancy(没有其他模块),在应用程序中创建一个名为Content的文件夹,然后向这个文件夹中添加HTML,Javascript,样式表或是其他,,按F5键,并开始托管该内容。
请注意,此Content文件夹不仅仅适用于ASP.NET托管,同样也适用于WCF托管,Windows服务中自托管,或在Azure托管。实际的主机平台根本不重要;这是Nancy的一个默认约定。
这只是Nancy为打造完整网站系统提供的一个小技巧。
Nancy 还提供:
- 基于多视图引擎下的动态试图(Dynamic views via multiple view engines)
- 简单的模型绑定(Simple model binding)
- 内容和数据校验(Content and data validation)
- 基本的会话管理(session management)
在本章中,您了解了Nancy适用于构建整个网站和Web应用程序中的一些特性,事实上,在写这本书到目前为止,我实际上听到一些人把NancyFX称为“.NET版的NodeJS”,因为它带来了许多Node的特性到.NET技术栈。
在下一章中,我们会采用预制的Visual Studio模板,使用"super-duper-happy-path"的编程方式 编写第一个基于Nancy的Web应用程序。
NancyFX 第三章 Web框架的更多相关文章
- 使用Micrisoft.net设计方案 第三章Web表示模式
第三章Web表示模式 体系结构设计者在设计第一个作品时比较精简和干练.在第一次设计时,并清除自己做什么,因此比较小心谨慎.第二个作品是最危险的一个作品,此时他会对第一个作品做修饰和润色,以及把第一次设 ...
- jQuery系列 第三章 jQuery框架操作CSS
第三章 jQuery框架操作CSS 3.1 jQuery框架的CSS方法 jQuery框架提供了css方法,我们通过调用该方法传递对应的参数,可以方便的来批量设置标签的CSS样式. 使用JavaScr ...
- Java开发工程师(Web方向) - 04.Spring框架 - 第5章.Web框架
第5章--Web框架 Web框架概述 Web框架单元测验 本次得分为:13.50/15.00, 本次测试的提交时间为:2017-09-25 1单选(2分) 关于Spring MVC中Dispatche ...
- 第三章 web设计原则:
程序员的修炼从优秀带卓越 第三章 web设计原则: 网站的评判标准 加载的速度要快 这到底是什么东西 给我看一个例子 清清楚楚的告诉我要做什么,并且扫除障碍 ...
- 使用Micrisoft.net设计方案 第三章Web表示模式 Web模式集群详细介绍 Observer(观察器)
在面向对象的编程中,对象同时包含数据和行为,这两者一起表示业务域的特定方面.使用对象生成应用程序的优点之一是可以将所有数据操作封装在对象内.这样, 就使对象成为独立的单位,并增加了在其他应用程序中重用 ...
- 第三章 Web页面建设
认识<q>元素: 简短的引用. 问:你去掉了双引号,换成了一个<q>元素,只是为了显示双引号?这样不是更复杂了吗? 答:不.在增加<q>元素之前,浏览器只知道这是一 ...
- 三分钟了解 Python3 的异步 Web 框架 FastAPI
快速编码,功能完善.从启动到部署,实例详解异步 py3 框架选择 FastAPI 的原因. FastAPI 介绍 FastAPI 与其它 Python-Web 框架的区别 在 FastAPI 之前,P ...
- python 全栈开发,Day66(web应用,http协议简介,web框架)
一.web应用 web应用程序是一种可以通过Web访问的应用程序,程序的最大好处是用户很容易访问应用程序,用户只需要有浏览器即可,不需要再安装其他软件.应用程序有两种模式C/S.B/S.C/S是客户端 ...
- HTTP协议和WEB框架
一.HTTP协议 <<HTTP权威指南>>读书笔记:https://www.cnblogs.com/qcssmd/p/5508150.html 一.HTTP简介 HTTP协议是 ...
随机推荐
- Mac下PyCharm快捷键大全
Mac键盘符号和修饰键说明 ⌘ Command ⇧ Shift ⌥ Option ⌃ Control ↩︎ Return/Enter ⌫ Delete ⌦ 向前删除键(Fn+Delete) ↑ 上箭头 ...
- ubuntu命令行下java工程编辑与算法(第四版)环境配置
ubuntu命令行下java工程编辑与算法(第四版)环境配置 java 命令行 javac java 在学习算法(第四版)中的实例时,因需要安装配套的java编译环境,可是在编译java文件的时候总是 ...
- 利用fiddler和mock调试本地微信网页
利用fiddler和mock调试本地微信网页 微信公众号网页是比较特殊的页面,普通页面直接打开即可访问,但对于需要请求微信相关接口的部分需要安全域名认证.这导致了使用mock数据进行开发的页面没办法走 ...
- 《android开发艺术探索》读书笔记(六)--Drawable
接上篇<android开发艺术探索>读书笔记(五)--RemoteViews [BitmapDrawable] 简单的图片 <!xml version="1.0" ...
- ARC068E - Snuke Line
原题链接 题意简述 给出个区间和.求对于任意,有多少个区间包含的倍数. 题解 考虑怎样的区间不包含的倍数. 对于的倍数和,满足的区间不包含任何的倍数. 于是转化为二维数点问题,可以用可持久化线段树解决 ...
- Ironic中pxe driver和agent driver的区别
历史问题: 以pxe_ipmitool 和agent_ipmitool为例,看起来似乎前者不使用ironic-python-agent,后者使用,但是实际上两者都使用ironic-python-age ...
- caffe之路-SIGTERM信号捕捉
Caffe在1.0版本仅支持两种信号的处理: 1) SIGHUP 2) SIGINT SIGHUP:caffe接收到此信号后进行snapshot,并不会中断caffe的训练. SIGINT:caffe ...
- 火狐浏览器导出EXCEL 表格,文件名乱码问题
牢骚:今天又是一个不太平的日子,打开任务表一看里面有一堆bug,其中有一个就是今天要说的这个关于商品导出的问题,本功能是临时授命接一个任务,本来呢这个导出功能在系统各大模块已经都很成熟了,但是总有一个 ...
- 创建基于MailKit和MimeKit的.NET基础邮件服务
邮件服务是一般的系统都会拥有和需要的功能,但是对于.NET项目来说,邮件服务的创建和使用会较为的麻烦..NET对于邮件功能提供了System.Net.Mail用于创建邮件服务,该基础服务提供邮件的基础 ...
- 判断ios或者android
<script type="text/javascript"> $(function () { // android和iso下载链接 var u = navigator ...