使用ASP.NET建立web項目時,一般選擇就是ASP.NET的網站應用程式類型或是web form應用程式類型,不然就是mvc模式。今天介紹一個完全脫離這些類型的.NET架構--Nancy。Nancy架構可以用來處理DELETE、GET、HEAD、OPTIONS、POST、PUT 和PATCH 的請求,並使用了一種簡單的、優雅的及DSL的處理方式。
你可以在Nancy的官網瞭解到更多:http://nancyfx.org/
一、在MonoDevelop 4.0中安裝NuGet外掛程式
安裝Nancy前,需要先安裝MonoDevelop的AddIn---NuGet(關於NuGet)。
開啟MonoDevelop,選 擇“工具”=》“Add in Manager”。在彈出的交談視窗中,選擇“Galley”的Tab頁,下拉選擇“Manage Repositories”。然後添加一個安裝源。
若是MonoDevelop3.0.5,請使用以下地址:
http://mrward.github.com/monodevelop-nuget-addin-repository/3.0.5/main.mrep
若是MonoDevelop 4.0,請使用以下地址:
http://mrward.github.com/monodevelop-nuget-addin-repository/4.0/main.mrep
添加完成後,點擊重新整理按鍵,可以看到nuget外掛程式已在列表中:
選中後,點擊右側底下的安裝按鈕,這樣就成功的把NuGet安裝到MonoDevelop中去了。
二、建立測試專案,並使用Nancy架構。
Nancy架構是可以宿主在ASP.NET的Web架構或MVC架構中的。本文將使用MVC作業 Nancy的宿主。
建立一個項目,我這邊將解決方案取名為FirstNancy,把web項目取名為FirstNancy.Web。當解決方案建立完成後,就可以Nuget的管理菜單
在彈出的視窗中,搜尋方塊裡輸入nancy,添加Nancy、Nancy.Hosting.Aspnet兩個組件到解決方案中,這時會在項目中自動添加兩個引用:Nancy.dll和Nancy.Hosting.Aspnet.dll。
除了添加兩個Nancy的引用外,添加操作還會修改Web.config裡的httpHandlers模組,這時,你還得手動修改,把之前的MVC的httpHandlers注釋掉,最後變成,如下代碼:
<httpHandlers> <!-- <remove verb="*" path="*.asmx" /> <add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> <add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> <add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" validate="false" /> <add verb="*" path="*.mvc" validate="false" type="System.Web.Mvc.MvcHttpHandler, System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />--> <add verb="*" type="Nancy.Hosting.Aspnet.NancyHttpRequestHandler" path="*" /></httpHandlers>
同時,把Global.asax裡的路由代碼去掉,
public class MvcApplication : System.Web.HttpApplication{public static void RegisterRoutes (RouteCollection routes){//routes.IgnoreRoute ("{resource}.axd/{*pathInfo}");////routes.MapRoute (//"Default",//"{controller}/{action}/{id}",//new { controller = "Home", action = "Index", id = "" }//);}public static void RegisterGlobalFilters (GlobalFilterCollection filters){filters.Add (new HandleErrorAttribute());}protected void Application_Start (){AreaRegistration.RegisterAllAreas ();RegisterGlobalFilters (GlobalFilters.Filters);RegisterRoutes (RouteTable.Routes);}}
建立一個DefaultModule.cs模組,代碼如下:
using System;using Nancy;namespace FirstNacy.Web{public class DefaultModule : NancyModule{public DefaultModule (){Get ["/"] = paramaters =>{return "<h1>Hello Nancy page!</h1>";};Get["/mult/{a}/{b}"] = paramaters => {int a,b;int.TryParse(paramaters.a.ToString(), out a);int.TryParse(paramaters.b.ToString(), out b);return string.Format("<h3>a * b = {0}</h3>", (a * b).ToString());};}}}
這邊的Module繼承自NancyModule,並且在DefaultModule的建構函式中,聲明了兩個路由。這些架構中的規則都可以在Nancy官網找到。完成後,可以產生,查看測試專案的顯示效果,如下:
訪問帶參數的頁面,如下:
三、Mono 3.0運行ASP.NET MVC項目時的注意事項
將上述的應用程式放置Ubuntu伺服器上,報了錯。原因是找不到System.Web.WebPages程式集。
後來查到張善友前輩的部落格《在mono 3.0 下運行ASP.NET 4網站的主意事項》後,在網站的web.config中,修改了System.Web.WebPages的相關配置,運行成功。
<assemblies> ... <add assembly="System.Web.WebPages, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" /> ... </assemblies>
所有有版本號碼為1.0.0.0的,都要改成2.0.0.0
<appSettings> <add key="webpages:Version" value="2.0.0.0" /> ... </appSettings>
Nancy架構有很特性都值得去研究一番,本文只是一個簡單的例子,詳細的架構規則可上Nancy官網查看文檔。
參考:
使用Nancy和Simple.Data兩個輕量級的架構打造一個分布式開發系統(一)
在mono 3.0 下運行ASP.NET 4網站的主意事項