`ASP.NET Core`是微軟提供的強大的`web`框架,它有很多潛在的強大而有用的功能。
有了本專欄的指引,你將把框架的隱藏能力最大限度地發揮出來;你將能夠按需定制ASP NET Core框架。本專欄提供了一種具體的操作和實現方法,可以讓你在短時間盡可能地提高效率。
## `ASP.NET Core`架構概覽
接下來,我們將介紹`ASP.NET Core`的基礎架構及其組件。這專欄討論了架構的幾乎所有組成部分。
下圖顯示了`ASP.NET Core 6.0`的基礎架構,讓我們從下往上快速瀏覽一下:

底部是`Host`層,它是引導`web`[服務和啟動ASP.NET](http://xn--ASP-4w2e9a37qusag89i.NET) Core所需的所有的東西,包括日志記錄、配置和服務提供者(`service provider`),這些對象都是上層需要的依賴項。
`Host`層之上是中間件層。該層負責處理請求對象,比如錯誤處理、權限控制、HSTS、CORS等等。
此外,還有路由層,它根據定義的路由模式將請求路由到端點`endpoints`。端點路由是NET Core的新層,它將路由與上面的UI層分離,以支持不同端點的路由,包括`Blazor`、`gRPC`和`Signal`。
> 提醒:在`ASP.NET Core`的早期版本中,路由是MVC層的一部分,其他每個UI層都需要實現自己的路由。
實際端點由第四層UI層提供,該層包含著名的UI框架`Blazor`、`gRPC`、`SignalR`和`MVC`。[作為ASP.NET](http://xn--ASP-c88dv5c.NET) Core開發人員,這里是你主要編碼的地方。
最后,在`MVC`上面,您將看到`WebAPI`和`Razor`頁面。
## 專欄涵蓋的內容
本專欄并未涵蓋架構概述中提到的所有主題。本書涵蓋了`Host`層的大部分主題,因為`Host`層包含了您可能需要定制的大部分內容。本專欄討論了中間件和路由,以及MVC特性和一些更多的WebAPI主題,在這些主題中你可以做一些魔性化定制。
在每篇的開頭,我會提示主題的難度級別。
## 專欄未涵蓋的內容
專欄不包括`Razor Pages`、`Signal`、`gRPC`和`Blazor`。
原因是`gRPC`和`Signal`已經非常專業化,不需要定制。`Blazor`[是ASP.NET](http://xn--ASP-888f.NET) Core的新成員,雖然尚未廣泛使用。此外,筆者本身對`Blazor`還不夠熟悉,不知道定制`Blazor`的所有細節。`Razor`頁面位于MVC框架之上,MVC的定制也適用于`Razor`頁面。
## 專欄的閱讀對象
本書面向使用`ASP.NET Core`的web開發人員,他們可能需要更改框架的默認行為才能完成任務。讀者應具備`ASP. NET Core`的基本知識,因為本專欄沒有介紹這些技術的基礎知識。讀者還應該對`Visual Studio`、`Visual Studio Code`或任何其他支持`ASP.NET Core`和`C#`的代碼編輯器有很好的了解。
## 專欄涵蓋的章節
第1篇:“自定義日志記錄”,介紹如何自定義日志記錄行為以及如何添加自定義日志記錄提供程序。
第2篇:自定義應用程序配置,幫助您了解如何使用不同的配置源和添加自定義配置提供程序。
第3篇:定制依賴注入,介紹依賴注入(`DI`)如何工作,以及如何使用不同的`DI`容器。
第4篇:用`Kestrel`配置和定制`HTTPS`,探討如何以不同的方式配置`HTTPS`。
第5篇:配置`WebHostBuilder`,幫助您了解如何在托管層上設置配置。
第6篇:使用不同的托管模型,介紹在不同平臺上使用不同類型的托管。
第7篇:使用`IHostedService`和`BackgroundService`,讓您了解如何在后臺執行任務。
第8篇:編寫定制中間件,探討使用中間件的`HTTP`上下文。
第9篇:“端點路由”,介紹如何使用新路由提供自定義端點。
第10篇:定制`ASP.NET Core`的`Identity`,介紹如何擴展應用程序的用戶屬性,并幫助您更改`Identity UI`。
第11篇:配置`Identity`(身份管理),幫助您管理用戶及其角色。
第12篇:使用自定義`OutputFormatter`的`Content Negotiation`(內容協商),介紹如何基于`HTTP Accept`頭輸出不同的內容類型。
第13章,使用自定義`ModelBinder`管理輸入,幫您創建具有不同內容類型的輸入模型。
第14章,創建自定義`ActionFilter`,介紹如何使用`ActionFilter`的面向切面編程。
第15章,使用緩存,幫助您提高應用程序的性能。
第16章,創建自定義`TagHelper`,通過創建`TagHelper`簡化您的UI層。
## 技術準備
讀者應具備`ASP.NET Core`的基本知識,以及`Visual Studio`、`Visual Studio Code`或任何其他支持`ASP.NET Core`代碼編輯器。
安裝最新的`NET 6.0 SDK`。請在以下[網址](https://dotnet.microsoft.com/download/dotnet-core/)查找最新版本。
使用任何支持`ASP NET Core`的代碼編輯器。我們建議使用`Visual Studio Code`([網址](https://code.visualstudio.com)),因為它可在所有平臺上使用。
專欄中的所有項目都將使用控制臺、命令提示符、`shell`或`PowerShell`創建。不建議使用`Visual Studio`創建項目,因為基本配置可能會被更改。
除了`NET 6.0`,理論上也支持`NET Core 3.1`或`NET 5.0`,有些章節介紹了NET 6.0和5.0的些許差異。
## 下載示例代碼
您可以從`GitHub`[](https://github.com/PacktPublishing/Customizing-ASP.NET-Core-6.0-Second-Edition)下載本書的示例代碼([網址](https://github.com/PacktPublishing/Customizing-ASP.NET-Core-6.0-Second-Edition))[](https://github.com/PacktPublishing/Customizing-ASP.NET-Core-6.0-Second-Edition)。
## 下載彩色圖片
我們還提供了一個PDF文件,其中包含本書中使用的截圖和彩色圖像,你可以在這里[下載](https://static.packt-cdn.com/downloads/9781803233604_ColorImages.pdf)。