使用Nancy構建基於mono的ASP.NET Web API

來源:互聯網
上載者:User

使用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網站的主意事項

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.