如果使用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應用程序。