ASP.NET Core 入門
關於ASP.NET Core
ASP.NET Core 是一個全新的開源、跨平臺框架,可以用它來構建基於網絡連接的現代雲應用程序,比如:Web 應用,IoT(Internet Of Things,物聯網)應用和移動後端等。ASP.NET Core可以運行在 .NET Core 或完整的 .NET Framework 之上,其架構為發布到雲端或本地運行的應用提供了一個最佳的開發框架,由開銷很小的模塊化組件構成,這就保持了你構造解決方案的靈活性。你可以跨平臺地在Windows、Mac和Linux等設備上開發和運行你的 ASP.NET Core 應用。ASP.NET Core 的源代碼已經在 GitHub 上托管。
為什麽構建ASP.NET Core
第一個 ASP.NET 預覽版在15年前(2000年)就已經作為.NET Framework的一部分發布。從那時起,有過成千上萬的開發者使用它來構建和運行強大的Web應用。這些年來,我們也對它添加和改進了很多功能。
ASP.NET Core具有大量的架構變動,這使得它顯得更加精細和模塊化。ASP.NET Core 不再依賴於 System.Web.dll 類型庫,取而代之的是一組細粒度、高度分解的 NuGet程序包。這使得你可以按需安裝NuGet程序包來優化你的應用。更小的表面積可以讓你的應用具有嚴密的安全性,能夠降低維護成本,提高性能,同時在“按使用量付費”的模式中減少開銷。
使用 ASP.NET Core,你將獲得以下基礎改進:
a) 在統一的方案中構建Web UI 和 Web API
b) 集成現代客戶端開發框架和工作流
c) 以雲就緒環境為基礎的配置系統
d) 內置依賴註入
e) 全新、輕量級、模塊化的HTTP請求管道
f) 在IIS或在自托管進程中托管應用程序的能力。
g) 以.NET Core為基礎,支持並行應用版本控制。
h) 完全以 NuGet 程序包方式分發
i) 一組全新的工具,簡化現代Web 開發
j) 在Windows、Mac和Linux等設備上開發和運行 ASP.NET應用
k) 開放源代碼和社區聚焦
應用程序解剖
一個ASP.NET Core應用其實就是一個簡單的控制臺應用程序,只是它在Main方法中創建了一個 Web 服務器而已:
using System; using Microsoft.AspNetCore.Hosting; namespace aspnetcoreapp { public class Program { public static void Main(string[] args) { var host = new WebHostBuilder() .UseKestrel() .UseStartup<Startup>() .Build(); host.Run(); } } }
Main 使用一個遵循生成器模式的 WebHostBuilder來創建Web應用程序宿主。生成器具有定義web服務器(UseKestrel)和指定啟動類(UseStartup<Startup>())的方法。 上述示例使用的是 Kestrel Web 服務器,但你可以指定其他類型的Web 服務器。在下一節中將展示更多 UseStartup 相關的信息。WebHostBuilder 提供了大量的選項方法,包括指定宿主為 IIS 和 IIS Express 服務器的 UseIISIntegration,指定內容根目錄的 UseContentRoot等。其中Build 和Run方法用於構建 IWebHost的實例,它將被用來掛載應用並開始監聽到來的HTTP請求。
啟動Startup
WebHostBuilder上的Startup方法用來指定你的應用程序的啟動類。
public class Program { public static void Main(string[] args) { var host = new WebHostBuilder() .UseKestrel() .UseStartup<Startup>() .Build(); host.Run(); } }
Startup 類是你定義請求處理管道的地方,也是配置應用需要的服務的地方。Startup類必須是public的,而且必須包含以下方法:
public class Startup { public void ConfigureServices(IServiceCollection services) { } public void Configure(IApplicationBuilder app) { } }
a) ConfigureServices 定義應用程序中用到的服務(請查看服務)(比如:ASP.NET MVC Core 框架,Entity Framework Core,Identity等等)
b) Configure 定義請求處理管道中的中間件
c) 查看 應用程序啟動 以了解更多信息
服務 Service
服務是應用程序中可共用的組件,通過依賴註入可獲得服務實例。ASP.NET Core 內置了簡單的控制反轉容器(Ioc,Inversion Of Control),默認是支持構造器註入的,但是可以輕松地將它替換為你習慣的IoC容器。除了其松散偶爾的好處,DI(Dependency Injection,依賴註入)還能讓服務在整個應用程序中可用。例如,日誌記錄(Logging)就可以在你應用程序的任何地方可用。查看 依賴註入 以了解更多信息。
中間件 Middleware
在 ASP.NET Core中你將使用中間件來組織你的請求管道。ASP.NET Core 中間件在HttpContext中執行同步邏輯,然後按順序調用下一個中間件或者直接終止請求。常規情況下,通過Configure方法的IApplicationBuilder調用相應擴展方法UseXYZ就可以“Use”(使用)中間件。
ASP.NET Core 本身預制了一組中間件:
a) 靜態文件 Static Files
b) 路由 Routing
c) 認證 Authentication
你還可以創作自己的中間件
你可以在ASP.NET Core 環境中使用任何基於 OWIN的中間件。查看 .NET開放Web 接口(Open Web Interface for .NET,OWIN) 以了解更多信息
服務器 Server
ASP.NET Core宿主模型不會直接監聽請求,它依靠HTTP 服務器的實現來轉發請求到應用程序。轉發的請求被包裝成一組功能接口,然後組合成一個應用程序 HttpContext。ASP.NET Core 包含一個名為 Kestrel的托管跨平臺Web服務器,通過它你可以在典型的web 服務器產品(比如 IIS或nginx等)上運行應用程序。
內容根目錄 Content Root
內容根目錄指的是應用程序使用的所有文件的基礎路徑,比方說它的視圖和web內容。默認情況下內容根目錄與掛載應用程序的可執行文件的基礎目錄是相同的。通過 WebHostBuilder可以指定其替代目錄。
Web目錄 Web Root
應用程序的Web目錄就是你項目中存放css、js、圖像文件等等公共、靜態資源的目錄。靜態文件中間件默認情況下只對Web目錄及其子目錄下的文件起作用。默認的Web目錄是 <內容根目錄>/wwwroot,但是你可以通過 WebHostBuilder 將其指定為其他目錄。
配置 Configuration
ASP.NET Core使用一個新的配置模型來處理簡單的名/值對。新的配置模型並不依賴於 System.Configuration 和 Web.config,取而代之的是,它從已排序的配置提供器(Configuration Provider)集合拉取配置。內置的配置提供器支持多種文件格式(XML,JSON,INI),還支持環境變量,這樣就可以使用基於環境的配置了。你還可以編寫自定義配置提供器。
查看 配置 以了解更多信息。
環境 Environment
比如“開發環境”和“生產環境”,這些在 ASP.NET Core 中都是一流概念,並且可以通過環境變量設置。查看 在多重環境中工作(Working with Multiple Environments) 以了解更多信息。
使用ASP.NET Core MVC構建Web UI和Web API
a) 你可以創建遵循MVC模式的高度分解、可測試的Web應用程序。查看 MVC 和 測試 以了解更多信息
b) 你可以構建支持多種格式、完全支持內容協商的 HTTP 服務。查看 格式化響應數據 以了解更多信息
c) Razor 提供了產出性語言來創建視圖
d) Tag 幫助器(Tag Helpers)允許服務端代碼在Razor文件中參與創建和呈現 HTML元素
e) 通過自定義或內置的格式化器(JSON,XML),你可以創建完全支持內容協商的HTTP服務。
f) 模型綁定能夠自動將HTTP請求參數映射為操作方法參數
g) 模型驗證能夠自動執行客戶端和服務端驗證
客戶端開發 Client-side development
ASP.NET Core被設計來無縫集成大量客戶端框架,包括 AngularJS,KnockoutJS和Bootstrap。查看 客戶端開發 以了解更多信息。
ASP.NET Core 入門