如果使用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框架的更多相关文章

  1. 使用Micrisoft.net设计方案 第三章Web表示模式

    第三章Web表示模式 体系结构设计者在设计第一个作品时比较精简和干练.在第一次设计时,并清除自己做什么,因此比较小心谨慎.第二个作品是最危险的一个作品,此时他会对第一个作品做修饰和润色,以及把第一次设 ...

  2. jQuery系列 第三章 jQuery框架操作CSS

    第三章 jQuery框架操作CSS 3.1 jQuery框架的CSS方法 jQuery框架提供了css方法,我们通过调用该方法传递对应的参数,可以方便的来批量设置标签的CSS样式. 使用JavaScr ...

  3. Java开发工程师(Web方向) - 04.Spring框架 - 第5章.Web框架

    第5章--Web框架 Web框架概述 Web框架单元测验 本次得分为:13.50/15.00, 本次测试的提交时间为:2017-09-25 1单选(2分) 关于Spring MVC中Dispatche ...

  4. 第三章 web设计原则:

    程序员的修炼从优秀带卓越 第三章 web设计原则:    网站的评判标准     加载的速度要快     这到底是什么东西     给我看一个例子     清清楚楚的告诉我要做什么,并且扫除障碍   ...

  5. 使用Micrisoft.net设计方案 第三章Web表示模式 Web模式集群详细介绍 Observer(观察器)

    在面向对象的编程中,对象同时包含数据和行为,这两者一起表示业务域的特定方面.使用对象生成应用程序的优点之一是可以将所有数据操作封装在对象内.这样, 就使对象成为独立的单位,并增加了在其他应用程序中重用 ...

  6. 第三章 Web页面建设

    认识<q>元素: 简短的引用. 问:你去掉了双引号,换成了一个<q>元素,只是为了显示双引号?这样不是更复杂了吗? 答:不.在增加<q>元素之前,浏览器只知道这是一 ...

  7. 三分钟了解 Python3 的异步 Web 框架 FastAPI

    快速编码,功能完善.从启动到部署,实例详解异步 py3 框架选择 FastAPI 的原因. FastAPI 介绍 FastAPI 与其它 Python-Web 框架的区别 在 FastAPI 之前,P ...

  8. python 全栈开发,Day66(web应用,http协议简介,web框架)

    一.web应用 web应用程序是一种可以通过Web访问的应用程序,程序的最大好处是用户很容易访问应用程序,用户只需要有浏览器即可,不需要再安装其他软件.应用程序有两种模式C/S.B/S.C/S是客户端 ...

  9. HTTP协议和WEB框架

    一.HTTP协议 <<HTTP权威指南>>读书笔记:https://www.cnblogs.com/qcssmd/p/5508150.html 一.HTTP简介 HTTP协议是 ...

随机推荐

  1. NDK开发,如何配置 debug环境

    刚开始做NDK 开发的时候,Android Studio 还没提供了 native C/C++ 设置断点 调试,我们都是通过输出 日志来调试,这样费时耗力.Android Studio 应该是在 2. ...

  2. ob_start、ob_get_contents使用

    要善于ob_start.ob_get_contents使用, 比如需要ajax获取 请求页面的模板信息 这个时候用到就很便捷 ob_start(); $this->assign('config' ...

  3. Linux系统软件安装的几种方式

    Linux系统,一个文件能不能执行看的是有没有可执行权限x,不过真正的可执行文件是二进制文件(binary file),举例来说Linux上的c语言源码编写完后,通过gcc程序编译后就可以创建一个可执 ...

  4. MYSQL索引的类型和索引的方式

    索引的类型: normal:表示普通索引 unique:表示唯一的,不允许重复的索引,如果该字段信息保证不会重复例如身份证号用作索引时,可设置为unique full textl: 表示 全文搜索的索 ...

  5. Tesseract OCR win 32位编译

    https://github.com/tesseract-ocr/tesseract/wiki/Compiling 找到该标题:Develop Tesseract 按照上面的步骤执行即可,最后使用 v ...

  6. 出行服务类API调用的代码示例合集:长途汽车查询、车型大全、火车票查询等

    以下示例代码适用于 www.apishop.net 网站下的API,使用本文提及的接口调用代码示例前,您需要先申请相应的API服务. 长途汽车查询:全国主要城市的长途汽车时刻查询,汽车站查询 车型大全 ...

  7. mysql无法启动的结果问题解决

    mac 上homebrew 安装的mysql,已经用了很长时间都没什么问题,今天 ERROR! The server quit without updating PID file (/usr/loca ...

  8. Linux的软链接和硬链接

    1.Linux链接概念Linux链接分两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link).默认情况下,ln命令产生硬链接. [硬连接]硬连接指通过索引节点 ...

  9. Luogu P1092 虫食算

    题目描述 所谓虫食算,就是原先的算式中有一部分被虫子啃掉了,需要我们根据剩下的数字来判定被啃掉的字母.来看一个简单的例子: 43#9865#045 +8468#6633 44445509678 其中# ...

  10. 如何将ubuntu控制台输出到串口?

    如何将ubuntu控制台输出到串口? Linux使用ubuntu14.04发行版本 操作步骤: 1.修改/etc/default/grub ## Modify this line by leekwen ...