NancyFX 第三章 Web框架

时间:2023-03-09 00:43:03
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应用程序。