《ASP.NET Core 開發實戰》 - 學習筆記

来源:https://www.cnblogs.com/GATTACA2011/archive/2020/07/17/13332345.html
-Advertisement-
Play Games

《ASP.NET Core 開發實戰》 [作者] (意) Dino Esposito[譯者] (中) 趙利通[出版] 清華大學出版社[版次] 2019年07月 第1版[印次] 2019年12月 第2次 印刷[定價] 79.80元 【前言】 (PVI) ASP.NET Core 是 ASP.NET 開 ...


《ASP.NET Core 開發實戰》

========== ========== ==========
[作者] (意) Dino Esposito
[譯者] (中) 趙利通
[出版] 清華大學出版社
[版次] 2019年07月 第1版
[印次] 2019年12月 第2次 印刷
[定價] 79.80元
========== ========== ==========

【前言】

(PVI)

ASP.NET Core 是 ASP.NET 開發人員需要瞭解的一種技術,是在多種平臺上進行 Web 開發時可供使用的另一種全棧解決方案。

【第01章】

(P006)

對於處理必須返回 HTML 內容的 Web 請求, ASP.NET MVC 編程模型是最靈活、最容易理解的方式。

(P008)

.NET Core Framework 主要被設計為用於 ASP.NET 應用程式。

.NET Core Framework 只能用來編寫 ASP.NET 和控制台應用程式。

.NET Core Framework 可與應用程式一同部署,而完整的 .NET Framework 只能安裝到目標機器上,由所有應用程式共用。

(P009)

.NET Core Framework 是從頭開始重新設計的一個新框架,看上去與完整的 .NET Framework 很類似,但是能夠跨平臺工作。

(P010)

ASP.NET Core 包含一個內置的 Web 伺服器和一個運行應用程式代碼的運行時環境。

【第02章】

(P015)

ASP.NET Core 有一個全新的運行時環境,只支持一種應用模型 : ASP.NET MVC 。

(P018)

一般來說, Web 根文件夾是內容根文件夾的子文件夾,被命名為 wwwroot 。

(P019)

ASP.NET Core 應用程式需要在一個宿主中執行。宿主負責該應用程式的啟動和生命周期管理。

(P021)

事實上, Configure 和 ConfigureServices 方法都是通過反射來發現並調用的。

(P026)

管道由中間件組件構成,這些組件在 Configure 中註冊,對於每個請求,按照註冊的順序調用它們。

(P032)

服務定位器模式更容易添加到現有框架中。依賴註入模式則是從頭構建的框架的理想選擇。

ASP.NET Core 中的 DI 框架並不是完善的 DI 框架,無法與業界頂尖的框架一爭。它只是做一些基本的任務,但做得很好,能滿足 ASP.NET Core 平臺的需要。

(P033)

需要重點註意,在 ConfigureServices 中可以註冊外部 DI 框架。不過,在註冊時,必須在啟動類中把方法的返回類型從 void 改為 IServiceProvider 。

只有少數的 DI 框架被移植到了 .NET Core 中,其中包括 Autofac 和 StructureMap 。

要讓自定義代碼在經典 ASP.NET 中運行,最快捷的方法是使用 HTTP 處理程式。

【第03章】

(P053)

在經典 ASP.NET MVC 中,如果沒有找到與 URL 匹配的路由,將得到 HTTP 404 狀態碼。但是,在 ASP.NET Core 中,任何終止中間件都將有機會來處理請求。

【第04章】

(P067)

控制器管理著請求的整個處理過程。

編寫控制器類的步驟可總結為兩個 : 實現一個類,然後在該類中添加一些公有方法,在運行時該類可以作為控制器被髮現,而這些方法則可作為操作被髮現。

(P068)

MVC 應用程式收到的只是一個待處理的 URL ,這個 URL 必須以某種方式映射到一個控制器類和一個公有方法。

(P069)

傳統路由和特性路由並不是互斥的。二者可用在同一個應用程式中。

特性路由始終是打開的,導致通過特性定義的路由比傳統路由的優先順序更高。

只要控制器類的名稱帶有 Controller 尾碼,並且繼承自 Controller 基類,就可以被系統發現。

(P070)

操作調用程式將 HTTP 上下文註入控制器實例,在控制器類內運行的代碼可通過 HttpContext 屬性方便地訪問 HTTP 上下文。

(P073)

ASP.NET Core 提供了內置的依賴註入 (DI) 框架,開發人員可通過這個框架來註冊抽象類型 (如介面) 及其具體類型,在請求抽象類型的引用時,返回該抽象類型的具體類型實例的工作則由框架來完成。

(P075)

在 Web 上,當點擊鏈接或者在地址欄中輸入 URL 時,是在執行 HTTP GET 命令。當提交 HTML 表單的內容時,是在執行 HTTP POST 命令。

(P080)

控制器操作方法能夠訪問 HTTP 請求傳遞的任何輸入數據。

(P081)

編寫操作方法體時,可以直接訪問熟悉的 Request 對象及其子類集合 (如 Form 、 Cookies 、 Query 和 Headers) 提交的任何輸入數據。

Request.Query 字典包含從 URL 的查詢字元串提取的參數及其對應值的一個列表。註意,在搜索匹配項時,不考慮大小寫。

(P082)

模型綁定器按精確的順序將參數與傳入的數據匹配起來。它首先檢查是否能夠在路由參數上找到匹配,然後檢查表單提交的數據,最後檢查查詢字元串數據。

(P083)

預設綁定器能夠映射所有的基本類型,如 string 、 int 、 double 、 decimal 、 bool 和 DateTime ,以及這些類型的相關集合。

(P085)

模型綁定器會尋找鍵名稱與屬性名稱匹配的提交值。這種匹配是不區分大小寫的。

(P090)

在 ASP.NET Core 中, Web API 框架 (包括其自己的控制器服務和操作結果類型) 已被集成到主框架中。

【第05章】

(P099)

從架構的角度來看,返回 HTML 標記的請求與返回純本文或 JSON 數據的請求並沒有區別。

(P101)

調用 View 函數將觸發視圖引擎,返回一個對象,該對象封裝了要使用的 Razor 模板文件 (一個擴展名為 .cshtml 的文件) 的名稱和一個視圖模型對象,後者包含了要在最終的 HTML 佈局中顯示的數據。

(P102)

視圖引擎是 MVC 應用程式模型的核心組件,負責從視圖創建 HTML 。

在控制器方法內,通過調用 View 方法來調用視圖引擎。

母版頁視圖預設為一個名為 _Layout.cshtml 的 Razor 文件,其 HTML 佈局是視圖的基礎。

(P104)

在 ASP.NET Core 中,每個應用程式只有一個預設的視圖引擎 : RazorViewEngine 類。

除了使用 ASP.NET Core 提供的 RazorViewEngine 類,也可以基於自定義語法來實現自己的視圖引擎。

(P105)

使用區域就像是使用多個子應用程式,是將較大的應用程式分區成較小的片段的一種方法。

使用區域時,他們會對路由產生影響。在傳統路由中,區域的名稱是另一個要考慮的參數。

(P110)

Razor 模板文件實際上就是 HTML 模板,其中穿插了一些用 C# 語言 (或者 ASP.NET Core 平臺支持的其他任何語言) 編寫的代碼塊。

@符號告訴解析器,在這個位置將發生靜態內容到代碼段的過渡。

(P112)

當多個 Razor 文件起作用時,編譯過程將分步驟進行。首先處理佈局模板,然後是 _ViewStart 和實際的視圖。之後合併輸出,這樣 _ViewStart 中的公共代碼將在視圖之前渲染,而視圖則在佈局內輸出其內容。

(P113)

控制器向視圖傳遞數據時,最簡單的方法是將信息存入一個 名稱 / 值 字典中。

(P115)

對於使用 ViewData 這樣弱類型的字典,最有說服力的理由是在編程時,它們使用起來簡單快捷。

(P116)

一般來說,在向視圖傳遞數據時,強類型視圖模型是優先選擇的方法。

視圖模型類完全代表了要渲染到視圖的數據。類的結構應該儘可能與視圖的結構匹配。

(P117)

一般來說,應該努力讓每個 Razor 視圖模型有一個專門的視圖模型類。

可以接受把實體模型直接傳遞給視圖的唯一一種情況是確實有一個 CRUD 視圖的時候。但是,坦白講,純粹的 CRUD 視圖如今只存在於教程和總結文章中。

(P118)

在 ASP.NET 中,可以將 DI 系統中註冊的任何類型的實例註入視圖中。這是通過 @inject 指令實現的。

ViewData 字典和 @inject 指令結合起來時,為從 Razor 視圖中獲取需要使用的任何數據提供了一種強大的、極為快速的方法。

(P119)

Razor 頁面就像一個無佈局的 Razor 視圖,但是它們使用的根指令是 @page 。Razor 頁面完整支持 Razor 語法,包括 @inject 指令和 C# 語言。

(P120)

需要註意, @page 指令會影響其他支持的指令的行為,所以必須是頁面中的第一條 Razor 指令。

不能將 Razor 頁面放到 Pages 文件夾之外。

【第06章】

(P123)

Razor 文件是一個文本文件,包含兩個主要的語法項 : HTML 表達式和代碼表達式。

(P124)

無論選擇什麼編程語言,@ 字元總是表明 Razor 代碼表達式的開始位置。

(P126)

HTML 幫助程式是 HtmlHelper 類的一個擴展方法。抽象來講, HTML 幫助程式只不過是一個 HTML 工廠。

(P127)

xxxFor 幫助程式與基礎版本的區別在於,它只接受一個 Lambda 函數作為參數。

當用來填充視圖的數據被分組到一個模型對象中時, xxFor 版本特別有用。

(P128)

在 Razor 中,佈局模板扮演了母版頁的角色。佈局模板定義了視圖引擎在任何映射的視圖中渲染的骨架,使得網站的對應部分有了一致的外觀和感覺。

佈局模板是一個完整的 HTML 模板,以 <html> 開頭,以 </html> 結束。

(P129)

在任何視圖中,在引用圖片、腳本和樣式表等資源時,都建議使用波浪號運算符 (~) 來指代網站的根目錄。

(P130)

所有佈局都強制至少有一個註入點,供註入外部視圖內容。這個註入點就是對方法 RenderBody 的調用。

每個節都通過其名稱標識,如果沒有標記為可選,那麼認為每個節都是必須存在的。

(P131)

可以在 Razor 視圖模板的任何位置定義一個節的內容。

【第07章】

(P151)

DI 框架有時也稱為控制反轉 (Inversion-of-Control, IoC) 框架。

DI 框架實際上就是將抽象類型 (通常是一個介面) 映射到一個具體類型。

(P153)

動態解析允許指定一個回調函數來解析依賴。

(P154)

必須調用 IServiceCollection 的某個 AddXxx 擴展方法來把自己的類型添加到 DI 系統中,以及將任何系統抽象類型綁定到不同的實現。

(P164)

要利用好一種強大的技術,最好的辦法就是把這種技術放到業務領域的上下文中。

對於軟體技術,如果沒有合理有效的架構,很難創建複雜的應用程式。

(P165)

在 ASP.NET MVC 應用程式中,表示層由控制器構成,應用層由控制器特定的服務類構成。

(P166)

當一個實體可用於輸入、邏輯、持久化和視圖時,說明處理的應用程式特別簡單。

在 ASP.NET 中,任何輸入數據都被封裝到一個 HTTP 請求中,不管輸入數據來自查詢字元串、表單提交的數據還是 HTTP 頭或 cookie 。

(P167)

建議為每個控制器創建一個服務類,讓控制器的操作方法服從服務類。

服務類中的方法將接受輸入模型中的類,返回視圖模型中的類。

應用層位於表示層和後端之間,進行任何必要的轉換。

當大量使用應用層時,控制器就成為精簡的控制器,因為它們把全部協調工作移交給了應用層。最後,應用層是可以完整測試的,並且完全不知道 HTTP 上下文。

存儲庫是最簡單和最著名的領域服務示例。領域服務類通常會引用數據訪問層。

(P169)

應該把異常處理中間件放到管道的最頂端,以確保能夠檢測到應用程式沒有捕捉的所有可能發生的異常。

(P170)

HTTP 上下文的 Features 對象是獲取未清除的異常信息的官方工具。

ASP.NET Core 的模塊化程度極高,需要使用的幾乎每個功能都必須被顯式啟用。

【第08章】

(P182)

所有聲明都是平等的,但是有一些聲明比其他聲明更加平等。

【第09章】

(P208)

layer 指的是應用程式組件之間的邏輯分離,而 tier 指的是物理上不同的應用程式和伺服器。

(P219)

NoSQL 存儲主要用作一種緩存形式,不常用作主數據存儲。

(P221)

EF Core 只支持 Code First 方法,這意味著它需要一組類來描述資料庫和容器表。

【第11章】

(P260)

HTML 表單是由一組 INPUT 元素構成的,當按下某個提交按鈕時,這些 INPUT 元素的值將被流傳輸到一個遠程 URL 。

【第12章】

(P278)

分部視圖不只使結果頁面組件化,加強重用和關註點隔離;而且更容易在客戶端刷新頁面的一部分,而不需要重新載入整個頁面。

【第14章】

(P315)

ASP.NET Core 應用程式本質上是一個獨立的控制台應用程式,它為實際的應用程式模型 (最有可能是 MVC 應用程式模型) 設置宿主環境。

(P324)

對於 ASP.NET Core 2.0 , Kestrel 是最常用的內部 HTTP 伺服器。這是一個基於 libuy 的跨平臺 Web 伺服器,而 libuy 是一個跨平臺的非同步 I/O 庫。

(P325)

.NET Core 支持的所有平臺和版本,都支持 Kestrel 。

(P327)

反向代理將實際的 Web 伺服器與來自各種用戶代理的請求完全隔離開。

【第16章】

(P362)

ASP.NET Core 應用程式的跨平臺本質是最重要的業務價值。

(P364)

ASP.NET Core 中性能提升的另外一個原因在於其模塊化。

整個 ASP.NET Core 框架以 NuGet 包的形式提供,允許只選擇自己真正需要的功能。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 前言 Dubbo是一個分散式服務框架,致力於提供高性能和透明化的RPC遠程服務調用方案,以及SOA服務治理方案。簡單的說,dubbo就是個服務框架,如果沒有分散式的需求,其實是不需要用的,只有在分散式的時候,才有dubbo這樣的分散式服務框架的需求,並且本質上是個服務調用的東東,說白了就是個遠程服務 ...
  • 條件語句 Go的條件語句和其它語言類似,主要是不支持三目運算符所以?:這種條件判斷是不支持的。Go提供的條件判斷語句主要有 if 還有 switch這兩種形式下麵是 if條件語句 if的幾種寫法,基本上和其它語言是一致的 if 條件 { } else { } if 條件 { } else if 條件 ...
  • 上次我們說到 微服務架構的前世今生(七):微服務架構生態體系 ,這次我們在說說微服務架構的技術支持。作者 哈嘍沃德先生,歡迎關註。 一、Spring Cloud Spring Cloud Netflix Eureka:服務註冊中心。 Spring Cloud Zookeeper:服務註冊中心。 Sp ...
  • 讀寫鎖實現邏輯相對比較複雜,但是卻是一個經常使用到的功能,希望將我對ReentrantReadWriteLock的源碼的理解記錄下來,可以對大家有幫助 前提條件 在理解ReentrantReadWriteLock時需要具備一些基本的知識 理解AQS的實現原理 之前有寫過一篇《深入淺出AQS源碼解析》 ...
  • 警告消息框主要是用來向用戶戶展示諸如警告、異常、完成和提示消息。一般實現的效果就是從系統視窗右下角彈出,然後加上些簡單的顯示和消失的動畫。 ###創建警告框視窗 首先我們創建一個警告框視窗(Form),將視窗設置為無邊框(FormBoderStyle=None),添加上圖片和內容顯示控制項 創建好警告 ...
  • 本系列將和大家分享面向對象23種設計模式中常用的幾種設計模式,本章主要簡單介紹下結構型設計模式。 ...
  • 前言 在C#中提供了一些關鍵字if、else、switch、for等,這些關鍵字為我們提供了應用程式的流程式控制制。後面幾個章節我們將看到的是流程式控制制在IL中的實現。 static void Main(string[] args) { var a = 1; if (a == 0) { Console.W ...
  • .cs: 類模塊代碼文件。業務邏輯處理層的代碼。 .sln:解決方案文件,為解決方案資源管理器提供顯示管理文件的圖形介面所需的信息。 .csproj:項目文件,創建應用程式所需的引用、數據連接、文件夾和文件的信息。 .aspx:動態網頁尾碼(拓展:jsp,php)。(靜態網頁尾碼,如:html,sh ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...