在 Nancy 中,最为神奇的莫过于路由了,定义路由模块是构成 Nancy 应用的骨架。在 Nancy 中定义路由,和在 ASP.NET MVC 那些类似的框架中有着非常大的区别。
以 ASP.NET MVC 为例,通常情况需要创建一个控制类。多数情况下,这个类提供了路由的约定。通过定义您的控制器类名和该类中的方法的名称,就能定义了该代码所处理的 "路由"
请看下面的例子:
- using System;
- using System.Linq;
- using System.web.Mvc;
- namespace Intranet.WebUi.Controllers
- {
- public class HomeController : Controller
- {
- public ActionResult Index()
- {
- return View();
- }
- }
- }
这段从标准 ASP.NET MVC 应用程序摘录的代码定义了 Home 路由下的 Index 节点,用于将 Http 请求路由到这段代码 ,请求地址应该是这样的 /home/index 。 如果使用 Nancy,就会有些不一样了。
首先,在 Nancy 应用中,继承 NancyModule 基类,才能定义路由。第二,不是每个路由都需要定义在一个单独的类中(如 MVC 示例),可以在模块类的构造构造函数中定义路由,使用 Rest 动词定义路由类型。
当然这可能导致过于庞大的构造函数,但是也有很多方式处理这个问题。
在往下看之前,我们需要先了解一些概念......
如果您习惯于看到从 web 浏览器的触发的 web 请求,你可能不知道,在它之下是相当复杂的协议。如果你从事于 web 相关的开发工作,很可能听说过称为 HTTP 协议。HTTP 通过使用一系列的动词来表示客户端希望服务器采取某些行动。
采用 Nancy,也无需了解太多 HTTP 动词的细节。实际上创建一个 REST 风格的应用,用到下面的 Rest 动词就好:
GET,顾名思义,用来检索数据从服务; 同样,删除是习惯请求数据被删除。PUT 和 POST 可能经常会造成混乱。遵循规范, PUT 意思是 "整体替换指定的",而 POST 用于 "在现有基础上添加"。许多开发人员创建基于 rest 风格的应用程序,也不过就是使用 GET 和 POST。
这方面 Nancy 走的更进一步,不同于大多数其他 web 为基础的框架,你可以定义自己的动词。在某种意义上,允许您创建您自己的基于 HTTP 的特定领域的语言。让我们深入剖析的 Nancy 路由模块,看看是如何工作的。
我们的第一个 Nancy 路由模块
看下面的代码
- using Nancy;
- namespace nancybook.modules
- {
- public class BaseRoutes : NancyModule
- {
- public BaseRoutes()
- {
- Get[@"/"] = _ => Response.AsFile("index.html", "text/html");
- }
- }
- }
作为一个 Nancy 项目,这是例子再简单不过了。
这个只有十一行的代码,监听所有向应用程序的 "/" 根路径的请求,返回 "Content" 文件一个名为 "index.html"HTTP 页面。
Content 文件夹是 Nancy 查询文件的默认文件夹,在下一张关于视图 Views 的章节,我们会涉及更多,但现在,只是确保项目有一个文件夹被称为 Content, 所有的 HTML 文件都放置于此。
撇开通常命名空间和类的代码部分 ,只有两点是这个 Nancy 路由模块添加的:继承了 NancyModule ,在构造函数中使用 GET 规则。
GET 规则意味着这将响应使用 GET 动词的 HTTP 调用,代码将执行响应根路径的 GET 请求。
来源: