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

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

2020-09-10 09:30:39 .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 包的形式提供,允許只選擇自己真正需要的功能,

轉載請註明出處,本文鏈接:https://www.uj5u.com/net/1649.html

標籤:.NET Core

上一篇:使用 EF Core 遷移功能來創建資料庫

下一篇:將終結點圖添加到你的ASP.NET Core應用程式中

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • WebAPI簡介

    Web體系結構: 有三個核心:資源(resource),URL(統一資源識別符號)和表示 他們的關系是這樣的:一個資源由一個URL進行標識,HTTP客戶端使用URL定位資源,表示是從資源回傳資料,媒體型別是資源回傳的資料格式。 接下來我們說下HTTP. HTTP協議的系統是一種無狀態的方式,使用請求/ ......

    uj5u.com 2020-09-09 22:07:47 more
  • asp.net core 3.1 入口:Program.cs中的Main函式

    本文分析Program.cs 中Main()函式中代碼的運行順序分析asp.net core程式的啟動,重點不是剖析原始碼,而是理清程式開始時執行的順序。到呼叫了哪些實體,哪些法方。asp.net core 3.1 的程式入口在專案Program.cs檔案里,如下。ususing System; us ......

    uj5u.com 2020-09-09 22:07:49 more
  • asp.net網站作為websocket服務端的應用該如何寫

    最近被websocket的一個問題困擾了很久,有一個需求是在web網站中搭建websocket服務。客戶端通過網頁與服務器建立連接,然后服務器根據ip給客戶端網頁發送資訊。 其實,這個需求并不難,只是剛開始對websocket的內容不太了解。上網搜索了一下,有通過asp.net core 實作的、有 ......

    uj5u.com 2020-09-09 22:08:02 more
  • ASP.NET 開源匯入匯出庫Magicodes.IE Docker中使用

    Magicodes.IE在Docker中使用 更新歷史 2019.02.13 【Nuget】版本更新到2.0.2 【匯入】修復單列匯入的Bug,單元測驗“OneColumnImporter_Test”。問題見(https://github.com/dotnetcore/Magicodes.IE/is ......

    uj5u.com 2020-09-09 22:08:05 more
  • 在webform中使用ajax

    如果你用過Asp.net webform, 說明你也算是.NET 開發的老兵了。WEBform應該是2011 2013左右,當時還用visual studio 2005、 visual studio 2008。后來基本都用的是MVC。 如果是新開發的專案,估計沒人會用webform技術。但是有些舊版 ......

    uj5u.com 2020-09-09 22:08:50 more
  • iis添加asp.net網站,訪問提示:由于擴展配置問題而無法提供您請求的

    今天在iis服務器配置asp.net網站,遇到一個問題,記錄一下: 問題:由于擴展配置問題而無法提供您請求的頁面。如果該頁面是腳本,請添加處理程式。如果應下載檔案,請添加 MIME 映射。 WindowServer2012服務器,添加角色安裝完.netframework和iis之后,運行aspx頁面 ......

    uj5u.com 2020-09-09 22:10:00 more
  • WebAPI-處理架構

    帶著問題去思考,大家好! 問題1:HTTP請求和回傳相應的HTTP回應資訊之間發生了什么? 1:首先是最底層,托管層,位于WebAPI和底層HTTP堆疊之間 2:其次是 訊息處理程式管道層,這里比如日志和快取。OWIN的參考是將訊息處理程式管道的一些功能下移到堆疊下端的OWIN中間件了。 3:控制器處理 ......

    uj5u.com 2020-09-09 22:11:13 more
  • 微信門戶開發框架-使用指導說明書

    微信門戶應用管理系統,采用基于 MVC + Bootstrap + Ajax + Enterprise Library的技術路線,界面層采用Boostrap + Metronic組合的前端框架,資料訪問層支持Oracle、SQLServer、MySQL、PostgreSQL等資料庫。框架以MVC5,... ......

    uj5u.com 2020-09-09 22:15:18 more
  • WebAPI-HTTP編程模型

    帶著問題去思考,大家好!它是什么?它包含什么?它能干什么? 訊息 HTTP編程模型的核心就是訊息抽象,表示為:HttPRequestMessage,HttpResponseMessage.用于客戶端和服務端之間交換請求和回應訊息。 HttpMethod類包含了一組靜態屬性: private stat ......

    uj5u.com 2020-09-09 22:15:23 more
  • 部署WebApi隨筆

    一、跨域 NuGet參考Microsoft.AspNet.WebApi.Cors WebApiConfig.cs中配置: // Web API 配置和服務 config.EnableCors(new EnableCorsAttribute("*", "*", "*")); 二、清除默認回傳XML格式 ......

    uj5u.com 2020-09-09 22:15:48 more
最新发布
  • C#多執行緒學習(二) 如何操縱一個執行緒

    <a href="https://www.cnblogs.com/x-zhi/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/2943582/20220801082530.png" alt="" /></...

    uj5u.com 2023-04-19 09:17:20 more
  • C#多執行緒學習(二) 如何操縱一個執行緒

    C#多執行緒學習(二) 如何操縱一個執行緒 執行緒學習第一篇:C#多執行緒學習(一) 多執行緒的相關概念 下面我們就動手來創建一個執行緒,使用Thread類創建執行緒時,只需提供執行緒入口即可。(執行緒入口使程式知道該讓這個執行緒干什么事) 在C#中,執行緒入口是通過ThreadStart代理(delegate)來提供的 ......

    uj5u.com 2023-04-19 09:16:49 more
  • 記一次 .NET某醫療器械清洗系統 卡死分析

    <a href="https://www.cnblogs.com/huangxincheng/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/214741/20200614104537.png" alt="" /&g...

    uj5u.com 2023-04-18 08:39:04 more
  • 記一次 .NET某醫療器械清洗系統 卡死分析

    一:背景 1. 講故事 前段時間協助訓練營里的一位朋友分析了一個程式卡死的問題,回過頭來看這個案例比較經典,這篇稍微整理一下供后來者少踩坑吧。 二:WinDbg 分析 1. 為什么會卡死 因為是表單程式,理所當然就是看主執行緒此時正在做什么? 可以用 ~0s ; k 看一下便知。 0:000> k # ......

    uj5u.com 2023-04-18 08:33:10 more
  • SignalR, No Connection with that ID,IIS

    <a href="https://www.cnblogs.com/smartstar/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/u36196.jpg" alt="" /></a>...

    uj5u.com 2023-03-30 17:21:52 more
  • 一次對pool的誤用導致的.net頻繁gc的診斷分析

    <a href="https://www.cnblogs.com/dotnet-diagnostic/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/3115652/20230225090434.png" alt=""...

    uj5u.com 2023-03-28 10:15:33 more
  • 一次對pool的誤用導致的.net頻繁gc的診斷分析

    <a href="https://www.cnblogs.com/dotnet-diagnostic/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/3115652/20230225090434.png" alt=""...

    uj5u.com 2023-03-28 10:13:31 more
  • C#遍歷指定檔案夾中所有檔案的3種方法

    <a href="https://www.cnblogs.com/xbhp/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/957602/20230310105611.png" alt="" /></a&...

    uj5u.com 2023-03-27 14:46:55 more
  • C#/VB.NET:如何將PDF轉為PDF/A

    <a href="https://www.cnblogs.com/Carina-baby/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/2859233/20220427162558.png" alt="" />...

    uj5u.com 2023-03-27 14:46:35 more
  • 武裝你的WEBAPI-OData聚合查詢

    <a href="https://www.cnblogs.com/podolski/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/616093/20140323000327.png" alt="" /><...

    uj5u.com 2023-03-27 14:46:16 more