下面糾正一個問題,Nancy官網并沒有明确的說Nancy是一個MVC架構,官方的定義是:Nancy是一個用于建構基于HTTP 的Web服務的架構。我題目中所寫的輕量級MVC架構有些不妥之處,但是可以讓大家快速的對Nancy有個大緻的了解。不過,說實話,Nancy和asp.net在一起,實在是太像MVC了。
今天主要講理論的東西,不寫代碼,文章中所提到的配置,隻是為了幫助了解,詳細配置和操作内容還請參考官方幫助文檔。
一、Hosting Of Nancy
1、Hosting Nancy with asp.net
方案一:整站都使用Nancy
在ASP.NET中,Nancy通過設定web.config,使用HTTP handler來處理請求。如果你在Visual Studio中使用了Nancy的模闆來建立,就會自動生成webconfig配置,否則就要添加如下配置到webconfig中:
并且還要确定你添加了Nancy和Nancy.Hosting.Aspnet 兩個dll的引用。
方案二:網站中一部分使用Nancy
除了使用Nancy搭建整個網站,我們還可以在已存在的網站中使用Nancy來處理某些特定路徑的請求。例如我們要處理nancypath下面的所有請求,我們隻需要修改上面的配置NancyHttpRequestHandler的path為path="nancypath/*",并且你也要在項目中添加指定路徑的檔案夾,并在檔案夾内放入如下Web.config:
除此之外,再修改webconfig中的<location>節點配置。
方案三:在MVC中使用Nancy
是的,你沒有看錯,Nancy和MVC一起使用,如果要在MVC中使用Nancy,需要修改Global.asax.cs檔案,添加如下内容:
這個時候,所有通路nancy目錄的請求,就都會被Nancy處理了,接下來,我們就可以這樣寫代碼了,例如:
這部分詳細内容參考:https://github.com/NancyFx/Nancy/wiki/Hosting-Nancy-with-asp.net
2.Hosting Nancy with wcf
如果你想搭建一個輕量級的HTTP服務而又不想使用IIS,Nancy是一個很好的選擇,你可以按照下面的操作來實作:
首先,安裝<code>Nancy.Hosting.Wcf,Nugget代碼如下:</code>
然後,編寫代碼,如下:
然後,Nancy就會偵聽本地的1234端口,處理HTTP請求。
這部分詳細内容參考:https://github.com/NancyFx/Nancy/wiki/Hosting-Nancy-with-wcf
除此之外,Nancy還有以下Host方式:
Hosting-nancy-with-azure 參考:https://github.com/NancyFx/Nancy/wiki/Hosting-nancy-with-azure
Hosting-nancy-with-owin 參考:https://github.com/NancyFx/Nancy/wiki/Hosting-nancy-with-owin
Hosting-Nancy-with-Umbraco 參考:https://github.com/NancyFx/Nancy/wiki/Hosting-Nancy-with-Umbraco
Hosting-Nancy-with-Nginx-on-Ubuntu 參考:https://github.com/NancyFx/Nancy/wiki/Hosting-Nancy-with-Nginx-on-Ubuntu
Hosting-Nancy-with-FastCgi 參考:https://github.com/NancyFx/Nancy/wiki/Hosting-Nancy-with-FastCgi
Self-Hosting-Nancy 參考:https://github.com/NancyFx/Nancy/wiki/Self-Hosting-Nancy
二、MVC和Nancy中的路由對比
1、Nancy中的路由機制
在上一篇的博文中,我們都知道Nancy中的所有路由都定義在module中的構造方法中,我們上次定義了一個無參路由,如下:
Nancy中有參路由可以這樣定義:
或者定義成異步的,如下:
Nancy中支援的method有:<code>DELETE</code>, <code>GET</code>, <code>HEAD</code>, <code>OPTIONS</code>, <code>POST</code>, <code>PUT</code> and <code>PATCH</code>.
當然,Nancy中還支援路由參數限制,例如我們要求參數必須為int類型,我們可以這樣定義:
除了int類型,Nancy還支援以下類型的限制:
感覺還不夠?Nancy還提供了自定義參數限制,比如我們要求參數是一個email,我們可以先定義如下類:
然後,定義路由如下:
下面是Nancy中路由常用的幾種寫法:
當然,Nancy的路由機制非常強大、非常靈活,那麼當一個位址可以比對多個路由時,Nancy會選擇哪一個呢?其實,Nancy中有一套路由的權重機制來解決路由沖突,這個到後面說路由的時候會詳細說的。
2、MVC中的路由機制
我們都知道MVC中的路由配置都在 Global.asax.cs中,當一個ASP.NET MVC應用程式第一次運作時, Application_Start()方法被調用。這個方法,又調用RegisterRoutes()方法,RegisterRoutes()方法建立了路由表。
MVC中的預設路由如下:
NVC中無參路由定義如下:
MVC中帶命名空間的路由定義如下:
MVC中帶限制的路由定義如下:
MVC全局路由:
綜上所述,MVC和Nancy的路由機制從功能上來說不相上下,MVC有的Nancy也有。不過,相比之下,Nancy中的路由更加簡單、靈活,畢竟MVC中的路由對于新手來說不是那麼容易掌握的。
三、MVC和Nancy中的視圖的對比
當然,視圖這塊大家還是比較關注的。下面簡單對比MVC和Nancy所支援的視圖:
MVC
Nancy
WebForm
支援
支援
Razor
這裡我們看到MVC和nancy都支援WebForm和Razor視圖。并且,Nancy在Razor視圖中也支援Model的綁定和部分視圖,在Nancy中的部分視圖中,也可以使用Modle綁定。
四、關于跨平台
雖然微軟剛剛宣布開源不久,但是在這之前,asp.net就可以通過Mono實作跨平台了。當然MVC和Nancy也可以通過Mono來實作跨平台。
到這裡,對在上一篇中所提到的問題,相信大家心中已經有答案了吧~~
QQ交流群:243633526
部落格位址:http://www.cnblogs.com/yunfeifei/
聲明:本部落格原創文字隻代表本人工作中在某一時間内總結的觀點或結論,與本人所在機關沒有直接利益關系。非商業,未授權,貼子請以現狀保留,轉載時必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接。
如果大家感覺我的博文對大家有幫助,請推薦支援一把,給我寫作的動力。