ASP.NET Core 介绍
原文:Introduction to ASP.NET Core
作者:Daniel Roth、Rick Anderson、Shaun Luttin
翻譯:江振宇(Kerry Jiang)
校對(duì):許登洋(Seay)、魏美娟(初見)、姚阿勇(Mr.Yao)
ASP.NET Core 是對(duì) ASP.NET 的一次意義重大的重構(gòu)。本文介紹了 ASP.NET Core 中的一些新概念,并且解釋了它們?nèi)绾螏椭汩_發(fā)現(xiàn)代的 Web 應(yīng)用程序。
章節(jié):
什么是 ASP.NET Core?
為什么構(gòu)建 ASP.NET Core?
應(yīng)用程序剖析
Startup
服務(wù)(Services)
中間件 (Middleware)
服務(wù)器(Servers)
內(nèi)容根目錄(Content root)
Web根目錄(Web root)
配置(Configuration)
環(huán)境(Environments)
使用 ASP.NET Core MVC 構(gòu)建 web UI 和 web APIs
客戶端開發(fā)
后續(xù)步驟
什么是 ASP.NET Core?
ASP.NET Core 是一個(gè)新的開源和跨平臺(tái)的框架,用于構(gòu)建如 Web 應(yīng)用、物聯(lián)網(wǎng)(IoT)應(yīng)用和移動(dòng)后端應(yīng)用等連接到互聯(lián)網(wǎng)的基于云的現(xiàn)代應(yīng)用程序。ASP.NET Core 應(yīng)用可運(yùn)行于?.NET Core?和完整的 .NET Framework 之上。 構(gòu)建它的目的是為那些部署在云端或者內(nèi)部運(yùn)行(on-premises)的應(yīng)用提供一個(gè)優(yōu)化的開發(fā)框架。它由最小開銷的模塊化的組件構(gòu)成,因此在構(gòu)建你的解決方案的同時(shí)可以保持靈活性。你可以在 Windows、Mac 和 Linux 上跨平臺(tái)的開發(fā)和運(yùn)行你的 ASP.NET Core 應(yīng)用。 ASP.NET Core 開源在?GitHub?上。
為什么構(gòu)建 ASP.NET Core?
ASP.NET 的首個(gè)預(yù)覽版作為 .NET Framework 的一部分發(fā)布于15年前。自那以后數(shù)百萬(wàn)的開發(fā)者用它開發(fā)和運(yùn)行著眾多非常棒的 Web 應(yīng)用,而且在這么多年之間我們也為它增加和改進(jìn)了很多的功能。
ASP.NET Core 有一些架構(gòu)上的改變,這些改變會(huì)使它成為一個(gè)更為精簡(jiǎn)并且模塊化的框架。ASP.NET Core 不再基于?System.Web.dll?。當(dāng)前它基于一系列顆粒化的,并且良好構(gòu)建的?NuGet?包。這一特點(diǎn)能夠讓你通過僅僅包含需要的 NuGet 包的方法來(lái)優(yōu)化你的應(yīng)用。一個(gè)更小的應(yīng)用程序接口通過“只為你需要的功能付出”(pay-for-what-you-use)的模型獲得的好處包括更可靠的安全性、簡(jiǎn)化服務(wù)、改進(jìn)性能和減少成本。
通過 ASP.NET Core,你可以獲得的改進(jìn):
一個(gè)統(tǒng)一的方式用于構(gòu)建 web UI 和 web APIs
集成?現(xiàn)代的客戶端開發(fā)框架?和開發(fā)流程
一個(gè)適用于云的,基于環(huán)境的?配置系統(tǒng)
內(nèi)置的?依賴注入
新型的輕量級(jí)的、模塊化 HTTP 請(qǐng)求管道
運(yùn)行于 IIS 或者自宿主(self-host)于你自己的進(jìn)程的能力
基于支持真正的 side-by-side 應(yīng)用程序版本化的?.NET Core?構(gòu)建
完全以?NuGet?包的形式發(fā)布
新的用于簡(jiǎn)化現(xiàn)代 web 開發(fā)的工具
可以在 Windows 、Mac 和 Linux 上構(gòu)建和運(yùn)行跨平臺(tái)的 ASP.NET 應(yīng)用
開源并且重視社區(qū)
應(yīng)用程序剖析
一個(gè) ASP.NET Core 應(yīng)用其實(shí)就是一個(gè)在其?Main?方法中創(chuàng)建一個(gè) web 服務(wù)器的簡(jiǎn)單控制臺(tái)應(yīng)用程序:
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?調(diào)用遵循 builder 模式的?WebHostBuilder?,用于創(chuàng)建一個(gè) web 應(yīng)用程序宿主。這個(gè) builder 有些用于定義 web 服務(wù)器 (如?UseKestrel)和 startup 類型(?UseStartup)的方法。在上面的示例中,web 服務(wù)器 Kestrel 被啟用,但是你也可以指定其它 web 服務(wù)器。我們將會(huì)在下一節(jié)展示更多關(guān)于?UseStartup?的內(nèi)容。WebHostBuilder?提供了一些可選方法,其中包括寄宿在 IIS 和 IIS Express 中的?UseIISIntegration?和用于指定根內(nèi)容目錄的?UseContentRoot。Build?和?Run?方法構(gòu)建了用于宿主應(yīng)用程序的?IWebHost?然后啟動(dòng)它來(lái)監(jiān)聽傳入的 HTTP 請(qǐng)求。
Startup
WebHostBuilder?的?UseStartup?方法為你的應(yīng)用指定了?Startup?類。
public class Program{ ? ?public static void Main(string[] args) ? ?{ ? ? ? ?var host = new WebHostBuilder().UseKestrel().UseStartup<Startup>()//手工高亮.Build();host.Run();} }Startup?類是用來(lái)定義請(qǐng)求處理管道和配置應(yīng)用需要的服務(wù)。?Startup?類必須是公開的(public)并且包含如下方法:
public class Startup{ ? ?public void ConfigureServices(IServiceCollection services) ? ?{} ? ?public void Configure(IApplicationBuilder app) ? ?{} }ConfigureServices?定義你的應(yīng)用所使用的服務(wù)(在下面查看?服務(wù)(Services)?)(例如 ASP.NET MVC Core framework、Entity Framework Core、Identity 等等)
Configure?定義你的請(qǐng)求管道中的?中間件(middleware)
更多內(nèi)容請(qǐng)參考:?Application Startup
服務(wù)(Services)
服務(wù)是應(yīng)用中用于通用調(diào)用的組件。服務(wù)通過依賴注入獲取并使用。 ASP.NET Core 內(nèi)置了一個(gè)簡(jiǎn)單的控制反轉(zhuǎn)(IoC) 容器,它默認(rèn)支持構(gòu)造器注入,并且可以方便的替換成你自己選用的 IoC 容器。由于它的松耦合特性,依賴注入(DI) 使服務(wù)在整個(gè)應(yīng)用中都可以使用。例如,Logging?在你整個(gè)應(yīng)用中都可用。查看?Dependency Injection?獲取更多信息。
中間件(Middleware)
在 ASP.NET Core 中,你可以使用?Middleware?構(gòu)建你的請(qǐng)求處理管道。 ASP.NET Core 中間件為一個(gè)?HttpContext?執(zhí)行異步邏輯,然后按順序調(diào)用下一個(gè)中間件或者直接終止請(qǐng)求。一般來(lái)說(shuō)你要使用一個(gè)中間件,只需要在?Configure?方法里調(diào)用?IApplicationBuilder?上一個(gè)對(duì)應(yīng)的?UseXYZ?擴(kuò)展方法。
ASP.NET Core 帶來(lái)了豐富的內(nèi)置中間件:
靜態(tài)文件(Static files)
路由(Routing)
身份驗(yàn)證(Authentication)
你也可以創(chuàng)建你自己的?自定義中間件。
你也可以在 ASP.NET Core 中使用任何基于?OWIN?的中間件。查看?OWIN?獲取更多信息。
服務(wù)器(Servers)
ASP.NET Core 托管模式并不直接監(jiān)聽請(qǐng)求;而是依賴于一個(gè) HTTP?server?實(shí)現(xiàn)來(lái)轉(zhuǎn)發(fā)請(qǐng)求到應(yīng)用程序。這個(gè)被轉(zhuǎn)發(fā)的請(qǐng)求會(huì)以一組 feature 接口的形式被包裝,然后被應(yīng)用程序組合到一個(gè)?HttpContext中去。 ASP.NET Core 包含了一個(gè)托管的跨平臺(tái) web 服務(wù)器,被稱為?Kestrel,它往往會(huì)被運(yùn)行在一個(gè)如?IIS?或者?nginx?的生產(chǎn) web 服務(wù)器之后。
內(nèi)容根目錄(Content root)
內(nèi)容根目錄是應(yīng)用程序所用到的所有內(nèi)容的根路徑,例如它的 views 和 web 內(nèi)容。內(nèi)容根目錄默認(rèn)與宿主應(yīng)用的可執(zhí)行程序的應(yīng)用根目錄相同;一個(gè)替代的地址可以通過?WebHostBuilder?來(lái)設(shè)置。
Web根目錄(Web root)
你的應(yīng)用的Web根目錄(Web root)是你項(xiàng)目中所有公共的、靜態(tài)的資源,如 css、js 和 圖片文件的目錄。靜態(tài)文件中間件將默認(rèn)只發(fā)布 Web 根目錄(Web root)和其子目錄中的文件。 Web 根目錄(Web root)默認(rèn)為?/wwwroot,但是你也可以通過?WebHostBuilder?來(lái)指定另外一個(gè)地址。
配置(Configuration)
ASP.NET Core 使用了一個(gè)新的配置模型用于處理簡(jiǎn)單的鍵值對(duì)。新的配置模型并非基于System.Configuration?或者?web.config?;而是從一個(gè)有序的配置提供者集合拉取數(shù)據(jù)。內(nèi)置的配置提供者支持多種不同的文件格式如(XML,JSON, INI)和用于支持基于環(huán)境的配置環(huán)境變量。你也可以實(shí)現(xiàn)你自己自定義的配置提供者。查看?Configuration?獲取更多信息。
環(huán)境(Environments)
環(huán)境,如 “Development” 和 “Production”,是 ASP.NET Core 中的第一級(jí)概念而且它可以設(shè)置成使用環(huán)境變量。查看?Working with Multiple Environments?獲取更多信息。
使用 ASP.NET Core MVC 構(gòu)建 web UI 和 web APIs
你可以使用 Model-View-Controller(MVC)模式創(chuàng)建優(yōu)秀的并且可測(cè)試的 web 應(yīng)用程序。查看MVC?和?測(cè)試。
你可以構(gòu)建支持多種格式并且完全支持內(nèi)容協(xié)商的 HTTP 服務(wù)。 查看?Formatting
Razor?提供了一種高效的語(yǔ)言用于創(chuàng)建?Views
Tag Helpers?啟用服務(wù)器端的代碼參與到 - Razor 文件的創(chuàng)建和 HTML 元素渲染
你可以使用自定義或者內(nèi)置的 formatters (JSON, XML)來(lái)構(gòu)建完全支持內(nèi)容協(xié)商的 HTTP 服務(wù)
Model Binding 模型綁定?自動(dòng)的映射 HTTP 請(qǐng)求中的數(shù)據(jù)到 action 方法參數(shù)
Model Validation 模型驗(yàn)證?自動(dòng)的執(zhí)行客戶端和服務(wù)器端驗(yàn)證
客戶端開發(fā)
ASP.NET Core 在設(shè)計(jì)時(shí)已考慮到和各種客戶端框架(AngularJS,KnockoutJS?和?Bootstrap)的無(wú)縫集成。查看?Client-Side Development?獲取更多信息。
相關(guān)文章:
ASP.NET Core 1.0 入門——了解一個(gè)空項(xiàng)目
ASP.NET Core 1.0 部署 HTTPS (.NET Framework 4.5.1)
.NET Core 1.0、ASP.NET Core 1.0和EF Core 1.0簡(jiǎn)介
云服務(wù)器下ASP.NET Core 1.0環(huán)境搭建(包含mono與coreclr)
使用VS Code開發(fā)ASP.NET Core 應(yīng)用程序
dotnet run是如何啟動(dòng)asp.net core站點(diǎn)的
ASP.NET Core提供模塊化Middleware組件
“dotnet restore"和"dotnet run"都做了些什么?
探秘 dotnet run 如何運(yùn)行 .NET Core 應(yīng)用程序
.NET Portability Analyzer 已開源
ASP.NET Core的配置(1):讀取配置信息
ASP.NET Core的配置(2):配置模型詳解
.NET Core 1.0 RC2 歷險(xiǎn)之旅
使用VS Code開發(fā) 調(diào)試.NET Core 應(yīng)用程序
讓我們Core在一起:ASP.NET Core & .NET Core
.NET Core VS Code 環(huán)境配置
官方博客明確了 .NET Core RC2/RTM 時(shí)間表
.NET Core全新的配置管理[共9篇]
利用記事本創(chuàng)建一個(gè)ASP.NET Core RC2 MVC應(yīng)用
微軟.NET 正式劈腿成功,橫跨所有平臺(tái)
.NET Core 1.0 CentOS7 嘗試
解讀發(fā)布:.NET Core RC2 and .NET Core SDK Preview 1
[.NET Core].NET Core R2安裝及示例教程
ASP.NET Core 開發(fā)-中間件(Middleware)
結(jié)合Jexus + Kestrel 部署 asp.net core 生產(chǎn)環(huán)境
通過Jexus 部署 dotnetcore版本MusicStore 示例程序
ASP.NET Core 中文文檔 第一章 入門
用 Visual Studio Code 在 macOS 上創(chuàng)建首個(gè) ASP.NET Core 應(yīng)用程序
用 Visual Studio 和 ASP.NET Core MVC 創(chuàng)建首個(gè) Web API
用 Visual Studio 發(fā)布一個(gè) Azure 云 Web 應(yīng)用程序
ASP.NET Core MVC 與 Visual Studio 入門
第二章指南(4.2)添加 Controller
DotNet Core 介紹
asp.net core 中間件詳解及項(xiàng)目實(shí)戰(zhàn)
教你實(shí)踐ASP.NET Core Authorization(免看文檔教程)
asp.net core 使用 Redis 和 Protobuf 進(jìn)行 Session 緩存
asp.net core 中間件詳解及項(xiàng)目實(shí)戰(zhàn)
第二章 指南(4.3)添加 View
dotnet core開發(fā)體驗(yàn)之開始MVC
dotnet core 開發(fā)體驗(yàn)之Routing
聊聊ASP.NET Core默認(rèn)提供的這個(gè)跨平臺(tái)的服務(wù)器——KestrelServer
簡(jiǎn)析.NET Core 以及與 .NET Framework的關(guān)系
.NET Core 使用Dapper 操作MySQL
使用 CommandLineApplication 類創(chuàng)建專業(yè)的控制臺(tái)程序
簡(jiǎn)析 .NET Core 構(gòu)成體系
.NET Core也可以使用MongoDB了
.NET Core & ASP.NET Core 1.0在Redhat峰會(huì)上正式發(fā)布
.NET Core:面向未來(lái)的開源跨平臺(tái)開發(fā)技術(shù)
微軟說(shuō)它深愛著Linux,現(xiàn)在它用行動(dòng)證明了
原文地址:http://www.cnblogs.com/dotNETCoreSG/p/aspnetcore-0-intro.html
.NET社區(qū)新聞,深度好文,微信中搜索dotNET跨平臺(tái)或掃描二維碼關(guān)注
贊賞
人贊賞
總結(jié)
以上是生活随笔為你收集整理的ASP.NET Core 介绍的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 移植.NET Core计划,整合各平台变
- 下一篇: ASP.NET Core 运行原理剖析1