由來
ASP.NET Core 是一個跨平臺的高效能開源框架,ASP.NET Core第一次出現在我們眼前是以 ASP.NET vNext 命名的,然後又重新命名為ASP.NET 5,為了表明它並不是 ASP.NET 的簡單迭代升級,最終命名為 ASP.NET Core。這是一個重新設計的Web開源框架,它最重要的特性是不再依賴IIS(依然可以部署在IIS上),支援跨平臺,可以在任何平臺上部署,這要得益於KestrelServer。
ASP.NET Core的效能和ASP.NET有著本質上的區別,因為大部分的ASP.NET被傳統的System.Web庫所限制,重新設計後的ASP.NET Core具有出色的效能和記憶體低佔用,它的設計更符合現代化的開發思想(模組化),這些設計思想可以使ASP.NET Core整個應用程式更容易開發和維護。
ASP.NET Core本質上就是一個控制檯程式,但是又跟Framework的控制檯程式不同,因為它在啟動的過程中註冊了一系列服務,而且構建了一系列的中介軟體和MVC的路由形成管道監聽Http請求和處理。
優點
ASP.NET Core 具有如下優點:
- 生成 Web UI 和 Web API 的統一場景。
- 針對可測試性進行構建。
- Razor Pages 可以使基於頁面的編碼方式更簡單高效。
- 能夠在 Windows、macOS 和 Linux 上進行開發和執行。
- 內建依賴項注入。
- 輕型的高效能模組化 HTTP 請求管道。
- 能夠在 IIS、Nginx、Apache、Docker 上進行託管或在自己的程式中進行自託管。
.NET生態圈
我們可以看到當前的.NET生態圈如下:
為什麼會有.NET Standard 這個東西?從上面的圖來看,.NET主要分為三個部分: .NET FrameWork, .NET Core, Xamarin,目前要掌握這三部分的.NET,就意味著需要掌握三種不同的各自的基礎類庫用來寫出在三種平臺上執行的程式碼。這就是 .NET Standard 出現的緣由,以及它要處在的位置,這意味著開發者們只需要掌握以 .NET Standard 作為目標平臺的基礎類庫,就可以在所有 .NET 平臺上寫出可執行的程式。
我們需要 .NET Standard 有兩個理由:
- 對一致性的動力。 我們想達成一個共識,所有 .NET 平臺都必須實現一組必需的 API 才可以獲得進入 .NET 庫生態系統的許可權。
- 優秀的跨平臺工具的基礎。 我們希望一個簡化的工具體驗,你只需要選擇一個版本號來指定所有 .NET 平臺的通用部分。
版本差異
在經過了1.x的沉澱後,2.x版本趨向於風格上的穩定,有興趣知道各個版本的一些特性和變化,可以參考ASPNET.Core各個版本差異以及新特性 ,有興趣的還可以關注3.x的預覽版。
環境
類似於ASP.NET依賴於Framework,ASP.NET Core 一樣需要自己的Runtime和SDK,在Core2.x之後,需要下載VS2017才可進行開發
WebAPI
在ASP.NET Core體系中,不再有獨立的WebAPI程式集,這個已經整合到MVC中
我們通過[ApiController]標籤以及[Route("api/xx")]路由標誌這是一個ApiController
MVC
ASP.NET Core MVC 框架是輕量級、開源、高度可測試的框架,並針對 ASP.NET Core 進行了優化。它提供一種基於開發模式的實現方式,用於生成可徹底分開管理事務的動態網站。 它提供對標記的完全控制,支援 TDD 友好開發並使用最新的 Web 標準。
MVC中加了些許新概念(如TagHelper,ViewComponents等),在實際開發過程中也和ASP.NET MVC有了較大的區別,後面在實際開發過程中講更多講解實際的應用。
重要物件和概念
在我們開始進入ASP.NET Core體系之前,我們先了解在ASP.NET Core體系中重要的幾個物件和概念,後面我們會陸續碰到再仔細分解。
HttpContext:請求上下文,對應Http請求的整個生命週期
IHostingEnvironment:應用程式的執行的宿主環境配置資訊
ILogger:日誌介面
IConfiguration: 用於應用程式的配置
IServiceCollection:Aspnet Core原生的依賴注入容器,負責服務註冊
IServiceProvider:負責解析註冊的例項
IApplicationBuilder:用於構建請求管道
Middleware:中介軟體,管道的組成者
WebHost:應用宿主
.NET Core 或 .NET Framework的選擇
在以下情況,對伺服器應用程式使用 .NET Core:
- 使用者有跨平臺需求。
- 使用者正在面向微服務。
- 使用者正在使用 Docker 容器。
- 需要高效能和可擴充套件的系統。
- 需按應用程式提供並行的 .NET 版本。
在以下情況,對伺服器應用程式使用 .NET Framework :
- 應用當前使用 .NET Framework(建議擴充套件而不是遷移)。
- 應用使用不可用於 .NET Core 的第三方 .NET 庫或 NuGet 包。
- 應用使用不可用於 .NET Core 的 .NET 技術。
- 應用使用不支援 .NET Core 的平臺。
在觀望了1.x版本後,以及在2.x的一個實際應用經驗中,秉著學習交流的想法,將個人的一些經驗寫下來,後續的文章將會把ASP.NET Core 中一些核心模組的原始碼進行解讀(ASP.NET Core 的原始碼已經全部託管在 GitHub 上)以及分享一些實際設計和應用經驗,籍此機會和大家交流些許學習心得,希望大家一起進步。
本系列文章更多偏向於原理的解讀和實際的應用,如果需要入門的幫助,建議從微軟的入門教程 開始進行學習。