前言
去年11月份參加了青島MVP線下活動,會上老MVP衣明志介紹了Nancy, 一直沒有系統的學習一下,最近正好有空,就結合.NET Core學習總結了一下。
注: 本文中大部分內容都是對官網文檔的翻譯和總結。
簡介
Nancy是一個的輕量級Http的服務框架, 全名NancyFx, Nancy框架的靈感來自於Ruby
的Sinatra框架,其作者名字叫Frank Sinatra, NancyFx這個名字中的Nancy是Frank Sinatra女兒的名字, Fx的意思是Framework, 即框架。
Nancy的優點
- 易於測試(Easier Testing), Nancy提供了相應的測試庫,可以很方便實現請求響應的測試
- 自動依賴注入(Automatic Dependency Resolution), Nancy使用了TinyIOC作為依賴注入框架
- 內容協商機制(Content Negotiation), Nancy既可以用來創建Api應用,可以來創建網站應用,甚至可以混合使用。
- 語法簡潔(Terse Syntax & Less Ceremony),語法上比MVC簡單的多
- 無配置化(No Config),Nancy的啟動和運行不需要任何配置
- 可以在任何地方運行(Runs Anywhere),Nancy可以寄宿在IIS, WCF, 可執行EXE文件, Windows Service中或自寄宿應用中(Self Hosted Application)
- 管道鈎子(Pipeline Hooks), Nancy允許用戶修改管道,可以在請求處理之前和發送響應之后自定義一些邏輯
編寫第一個Nancy應用程序
首先我們創建一個空的.Net Core App, 命名為HelloNancy
項目創建成功之后,使用Nuget引入Nancy庫, 選擇(2.0.0-barneyrubble)版本
Nancy 2.0.0-barneyrubble是基於.NET Stardard的項目,所以可以在.NET Core中使用
注意:寫這個實例代碼的時候,我使用的是.Net Core 2.1.4, Microsoft.AspNetCore.All中默認已經包含了Microsoft.AspNetCore.Owin, 如果你的.Net Core版本較低,用Nuget手動添加Microsoft.AspNetCore.Owin庫
引用添加完成之后,下一步我們來修改Startup.cs, 這里我們可以使用app.UseOwin
方法將Nancy注冊到NET Core MVC的管線中
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseOwin(x => x.UseNancy());
}
接下來我們添加一個新類HelloModule, HelloModule
繼承自NancyModule
public class HelloModule : NancyModule
{
public HelloModule()
{
Get("/", p => "Hello World");
}
}
這里Get方法中有2個參數,第一個參數是類似於NET Core MVC Route的路由模板,第二個參數是當用戶請求的Url符合該路由模板的時候,做出的響應, 相當於NET Core MVC中的action。
至此一個最簡單的Nancy應用就完成了,下面我們啟動項目, 網站中正確顯示了"Hello World"
怎么樣,看起來是不是很簡潔。