跳至內容

ASP.NETCore

出自Taiwan Tongues 台語維基
這是此頁批准,以及是最近的修訂。

ASP . NET Core是新一代的 ASP . NET,早期號做 ASP . NET vNext,並且咧推出初期號名做 ASP . NET 五,毋過隨著 . NET Core 的成熟,以及 ASP . NET 五的號名予外界將伊看做是 ASP . NET 的升級版,但伊其實是新一代對頭開始打造的 ASP . NET 核心功能,因此微微仔軟宣佈共改做佮 . NET Core 仝步的名,即 ASP . NET Core。

ASP . NET Core 可運行佇咧 Windows 平台佮非 Windows 平台,如 Mac OSX 以及 Ubuntu Linux 作業系統,是 Microsoft 第一个有跨平台能力的 Web 開發框殼。

微軟佇咧一開始開發就將 ASP . NET Core 開源,因此伊嘛是開源專案的一員,由 . NET 基金會 ( . NET Foundation ) 所管理。

開發的歷程

ASP . NET vNext 上早是佇二空一四年五月被提出,彼當陣是用專案代號 K ( Project K ) 號名,包含工具佮執行期平台攏以 K 來號名,這个名稱做 KRE ( K Runtime Environment ) 如:

  • KLR ( K Language Runtime ) : Project K 的執行期平台。
  • KVM ( K Version Manager ) : Project K 的版本的管理員。
  • KPM ( K Package Manager ) : Project K 的套件管理員,類似 node . js 的 npm ( Node . js Package Manager )。
  • K ( K Loader ) : Project K 的程式啟動器。

KRE 佇咧二空一四年度的時陣捌一度佇咧版本黜規个出現 RC 的字眼,毋過隨後 ASP . NET Core 開發團隊發出一份新的 Roadmap,公佈後續的版本計畫。

到位矣 Build 二千空一十五時,微軟將專案 K 重號名,改稱做 . NET 執行環境 ( . NET Execution Environment ),簡稱 DNX,其實工具嘛開始咧進行更名 :

  • DNVM ( . NET Version Manager ) : DNX 的版本的管理員。
  • DNU ( . NET Package Manager ) : DNX 的工具,會當支援建造,閣原佮管理封裝等等。
  • DNX ( . NET Loader ) : DNX 的程式啟動器。

後續到矣 ASP . NET Core RC 一時,. NET Core 已經發展甲熟矣,而且嘛有家己的工具 . NET Core CLI ( dotnet . exe ),這當陣微軟決定欲 DNX 和 . NET Core CLI 合併,並且正式於 ASP . NET Core 一垺零 . 零 RC 兩个時陣欲 DNX 支援終止,改由 . NET Core CLI 提供基礎的編譯佮執行功能。

核心功能

ASP . NET Core 核心設計上是採用 Open Web Interface for . NET ( OWIN ) 為概念發展,OWIN 佇咧概念就強調講以程式碼來定義系統功能,並一度佇咧 ASP . NET MVC 五列入其功能之一,後續的 Web API 佮 SignalR 嘛使用矣 OWIN,但並無引起太濟開發人員的重視,其主要因為這條 Visual Studio 簡化了傷多元件間參考定義的工課,若是欲回歸由原始碼作業,顛倒會予開發人員閣無法度適應。毋過隨著微軟確定將 ASP . NET Core 開發做會當迒平台的核心架構的時,其專案參考系統嘛有 Visual Studio 為主的加入參考對話盒仔踅向到以 project . json ( . NET Core / ASP . NET Core 的專案組態檔 ) 為主,予開發人員袂當閣用 GUI 介面來加入元件參考,利用編輯 project . json 的方式加入,這陣由程式碼加入功能的做法才慢慢仔予人開發人員所接受,雖然講這佇 Mac 以及 Linux 環境是閣較平常猶毋過的代誌。

是由程式碼決定功能

ASP . NET Core 講法法應用矣 . NET 的擴充方法 ( Extension Method ),將 ASP . NET Core 的功能模組 ( ASP . NET Core 伊的術語是 Middleware ) 以擴充方法的方式佮掛佇咧 IApplicationBuilder 介面上,以 Use 一開頭的方法為號名標準,所有應用程式所需要的功能攏愛添加佇咧 Startup 類別內,DNX Runtime 佇咧啟動的時陣會揣應用程式來看 Startup 東西,並且喚起伊內底的特定方法 ( 如 Configure ( ) ),以加入應用程式的功能。

像下列程式碼:

內建的相依注入

ASP . NET Core 核心內起了基本的相依注入 ( Dependency Injection ) 能力,這意味對 ASP . NET Core 應用程式有閣較強的擴充能力,連帶的如 ASP . NET Core MVC ( ASP . NET Core 的 Web 開發框殼 ) 嘛因為 ASP . NET Core 的相依注入功能,可在 Controller 內直接注入介面東西。ASP . NET Core 內底提供兩種相依照注入功能,一个是管線式相依照注入 ( ASP . NET Core 共號做 Framework-Provided Services ),另外一種是由系統註冊的依照注入,由開發人員利用 ASP . NET Core 提供的 IServiceCollection 介面內的方法註冊需要的介面佮服務,才由程式來取用。

IServiceCollection 支援四種類型的服務相依照注入:

一 . Transient : 逐改要求的時陣攏建立,無論講敢有仝一个範圍。 二 . Scoped : 只有佇一个要求範圍內底建立一改,佇彼時陣的範圍內底等於 Singleton。 三 . Singleton : 只會提供一个物件的執行個體,毋過生成是由系統做。 四 . Instance : 佇應用程式的性命週期內只會提供一个物件的執行個體,猶毋過生成是由開發人員負責。

ASP . NET Core 嘛無限干焦會當用 ASP . NET Core 本身的相依注入功能,若是有佮意抑是慣勢用的相依注入元件 ( 如 Autofac、StructureMap 等 ),嘛會當用𪜶取代內底起的相依注入功能。

代管 ( Hosting ) 方式

ASP . NET Core 共咱奧援自我代管 ( Self-hosting ) 以及 Web Server 代管 ( Web Server-hosting ) 的功能,早期 ASP . NET Core 有延續以 IIS 為主要代管服務的設計 ( 彼陣的代號為 Helios ),但是到甲 ASP . NET Core Beta 八時,微軟宣佈欲以 Kestrel Server 為主要的代管侍服器,Kestrel Server 是以 libuv 為基礎開發的 Web Server 代管行程 ( Hosting Process ),藉由 libuv 的協助,Kestrel Server 會當迒平台,嘛會當適合 IIS,軟勢嘛為著 IIS 使用 Kestrel Server 咧發展矣 IIS Platform Handler,予 IIS 會當直接共 HTTP 的要求直接轉送予 Kestrel Server。

自 ASP . NET Core 一垺零 . 零-rc 做伙的,代管方式已經回歸以 Kestrel Server 為主,原本的 IIS Platform Handler 嘛依照 ASP . NET Core 的特性改寫為 ASP . NET Core Module,如果要使用 IIS 架設 ASP . NET Core 應用程式,著愛使用此模組。

專案系統

佇咧 ASP . NET Core v 一丈零的時陣,ASP . NET Core 無閣用矣 . csproj 的專案管理方式,是改用以 kha-tá-lok-guh 為主的這个案管理,原本的 Web . config 無閣存在矣,取代之的是 project . json,以及作為組態設定的 appsettings . json 檔案,這兩个檔案攏是 JSON 格式。雖然講佇 Visual Studio 的 ASP . NET Core 的專案範本內底,Web . config 猶閣存在,但是伊的存在干焦為著欲踮 IIS 中附掛上 HTTP Platform Handler 爾爾。

隨著 . NET Core v 一垺一回歸到講 MSBuild 的策略,ASP . NET Core v 做伙閣再倒轉來 . csproj 的專案管理方式,但是猶原保留 kha-tá-lok-guh 為主的專案管理做法。

v 一丈零的時陣

project . json

ASP . NET Core v 一丈空時期由 project . json 主掌專案的執行期的組態設定,包含專案的套件參考 ( Package References )、專案的基本設定、啟動指令、包括抑是排除指定 kha-tá-lok-guh、猶閣有建造時的相關事件指令等。

下列 JSON 為 project . json 的範例:

appsettings . json

appsettings . json 是用來代替 Web . config 內的 < appSettings / > 佮 < connectionStrings / > 兩个開發人員上捷用的組態區段,其內容比如講下底 :

猶毋過 appsettings . json 無成 project . json 是由 DNX 自動讀取,appsettings . json 抑是後續加入的組態檔攏是屬於功能之一,依照 ASP . NET Core 由程式碼決定功能的特性,開發人員需要加入下列程式才會當予 appsettings . json 生效。

v 一孵一个時期

隨著 . NET Core 一垺一回歸 MSBuild 建置系統管理後,ASP . NET Core 一扣一的套件管理嘛會當支援 IDE GUI 的圖形化介面參考管理功能。

ASP . NET Core 一孵一的 Visual Studio 工具嘛另外加入去矣 Bower 套件的圖形化介面管理功能。

套件相依管理

ASP . NET Core 的套件相依管理 ( Package Dependency Management ) 由 project . json 負責,project . json 內的 dependencies 區段佮 frameworks 區段負責管理對套件的相依,以及對特定 Framework 版本內組件的相依。

dependencies 內底的套件是以 " 套件代碼 " : " 版本 " 的格式設定,比如講 " Microsoft . AspNet . Mvc " : " 一垺零 . 零-rc 一-final " 表示參考 Microsoft . AspNet . Mvc 套領的 v 一垺零 . 零-rc 一-final 版本。套件佮版本的資訊是用 NuGet 所提供,佮往過就愛參考的方式加入去對特定組件的相依性有真大的無仝,這嘛是 . NET Core / ASP . NET Core 的特色之一,毋免閣去安裝大包的 . NET Framework,只要使用 DNU 的 restore 指令,就愛還原所參翕的相依套件。

frameworks 是定義了特定系統環境內所相依的特定組件佮其版本,佇這个定義的組件就愛事先安裝佇電腦內才會當提用,佮 dependencies 會閣原套件無仝。開發人員會當予定一个字串來代表特定環境 ( 比如講 dnx 四十五表示 DNX on . NET 四配五、dnxcore 五表示 DNX on . NET Core 五 ),然後佇內底指定特定的組件佮其版本。

自一孵零 . 零-rc 二起,DNX 的功能由 . NET Core CLI 取代,彼陣仔因此閣原套件的指令改做 dotnet restore。

組件

ASP . NET Core 以 . NET Core 的基礎發展,其目前的組件有:

一 . ASP . NET Core MVC  : 目前欽定的 Web 應用程式開發框架。 二 . ASP . NET Core SignalR : 新一代的長時輪詢 ( Long-Time Polling ) 訊息通訊基礎建設,計畫佇咧 ASP . NET Core 一垺零 . 零釋出來才會繼續進行開發。 三 . Entity Framework Core : 後一代的 ADO . NET Entity Framework,採用 . NET Core 閣重新設計,為欽定的 ORM 資料的存取技術。 四 . Identity Core 五 . Razor Core 六 . Blazor 七 . Kestrel web server

開發工具

ASP . NET Core 的可用開發的工具有:

  • Visual Studio,內建有 ASP . NET Core 的彼个案本,嘛會當使用 IDE 的功能建造和部署應用程式 ( 比如講 Azure Web App 抑是講 ASP . NET Docker Image on Azure 等 )。
  • Visual Studio Code,迒過平台的 Visual Studio 編輯器。
  • Yeoman Generator for ASP . NET,提供予 Mac 佮 Linux 等作業系統,會當直接產生專案範本的工具。
  • 只要是文字編輯器攏會當編修 project . json 佮程式碼檔案,毋過欲家己處理建造佮部署的細節。

版本的過程

參考