《ASP.NET MVC 5 網站開發之美》 - 學習筆記

来源:https://www.cnblogs.com/GATTACA2011/archive/2020/05/04/12827519.html
-Advertisement-
Play Games

《ASP.NET MVC 5 網站開發之美》 [作者] (台) demo (台) 小朱 (台) 陳傳興 (台) 王育民 (台) 陳仕傑[出版] 清華大學出版社[版次] 2015年09月 第1版[印次] 2017年03月 第2次 印刷[定價] 128.00元 【第01章】 (P004) 目前網頁前端技 ...


《ASP.NET MVC 5 網站開發之美》

========== ========== ==========
[作者] (台) demo (台) 小朱 (台) 陳傳興 (台) 王育民 (台) 陳仕傑
[出版] 清華大學出版社
[版次] 2015年09月 第1版
[印次] 2017年03月 第2次 印刷
[定價] 128.00元
========== ========== ==========

【第01章】

(P004)

目前網頁前端技術非常多元化,開發者一定要選擇容易自定義與修改的框架作為主要開發框架。

(P005)

Model 可翻譯為數據模型, “數據模型” 用於封裝與應用程式在商業邏輯上相關的數據,以及對其數據操作的處理方法。

Model 並不依賴 View 或 Controller ,也就是說 Model 不需要知道它會如何被顯示或如何被應用,只需要專註於做好數據訪問、定義、驗證的責任即可。

在 ASP.NET MVC 中推薦使用強類型的方式設計 Model 層,才可以有效地利用內建的模型綁定 (Model Binding) 與模型驗證機制。

(P007)

在項目初期設計的時候建議將用戶介面層和商業邏輯層明確地分離開,後續在開發上也會比較順手。

(P010)

開發人員可以在同一項目中增加許多核心引用。

(P011)

Single Page Application 模板只使用單一頁面來呈現各種各樣的內容,單一頁面的數據交換依賴 JavaScript (Client) 調用 Web API (Server) 獲取,所以當開發人員選擇使用 Single Page Application 模板時會發現預設同時勾選 MVC 與 Web API 。

(P012)

T4 為 “Text Template Transformation Toolkit” 的縮寫,是一種文字模板轉換的工具,利用 T4 可以很容易地生成程式代碼。

(P017)

現在網路交換數據的格式,從以往的 XML 已經漸漸轉換到更省流量的 JSON 。

(P022)

NuGet 會將此項目用到的程式包記錄在 packages.config 內,因此程式包還原必須依賴此配置文件,此配置文件請務必加入版本管理。

(P037)

MVC 的設置方式是後端會將指定的數據傳輸到前端,不管後端開發者是使用 ViewBag 、 ViewData 、 TempData 或是直接傳一個 Model 到前端,預設的 DefaultModelBinder 類都會自動將名稱相同的部分自動綁定。

【第02章】

(P060)

程式是由數據和演算法組成的,在 MVC 應用程式中,演算法由 Controller 提供,而數據當然就是由 Model 來提供。

(P061)

既然 Model 是程式外部提供的數據,也就代表了 Model 並不限於特定技術 (例如 EF) 。

(P062)

Model 不會主動與數據源溝通,而是利用一個中介層,這個中介層規定了數據源要怎麼處理 Model ,包括數據源的訪問和 Model 間的數據轉換等,這個中介層稱為 Repository (主數據資源庫) , Repositpry 負責 Model 和數據源間的協調合作。

(P065)

泛型的表示法由類與類型參數 (type parameter) 所組成,以 List<T> 為例, List 為類名稱,而 <T> 則表示此類為泛型類,其中的 T 即是類型參數。

泛型也可以用在屬性與方法上。

(P068)

如果一個泛型類要使用兩個以上的類型參數時,可以針對各個不同的類型參數設置 where 的限制,以確保類型參數是必要的。

(P074)

SQL 指令一定要用參數化查詢法,否則就會出現 SQL Injection 的漏洞。

(P082)

參數化查詢是目前唯一可預防 SQL Injection 漏洞的方法。

【第03章】

(P085)

LINQ 真正的威力其實並不只是 SQL 指令的終結,而是它隱含對集合對象的強大訪問能力,以及為了實現 LINQ 技術而在 .NET Framework 內所添加的各種擴展能力,這些能力才是 LINQ 真正的價值所在。

(P089)

LINQ 本身的基礎建設實現於 System.Linq 命名空間內,若沒有使用 using 引入這個命名空間的話,所有 LINQ 功能都無法使用。

(P091)

對象初始化器 (object initializer) 允許在程式中通過聲明的方式直接給對象屬性進行數值的初始化,而不必刻意建立有參數的構造函數,可降低程式員維護多個構造函數的負擔。

(P092)

對象初始化器可和有參數的構造函數並用。

對於數組或集合的賦值,刻意利用相似的語法來實現,不過在初始化器內所初始化的不是集合的屬性,而是集合內的元素。

(P093)

匿名類型雖然好用,但它有幾個麻煩的限制 :

1. 匿名方法一般只會用在同一個函數內,如果要讓它被其他函數共用,則必須要動用到 Reflection ,或是利用 .NET 4.0 提供的動態類型 (dynamic types) 機制;

2. 匿名類型只能有屬性,不可以有方法、事件或欄位等;

3. 兩個匿名類型對象的相等 (equal) ,必須要兩個對象的屬性值都相等才行;

4. 匿名類型的初始化只能利用對象初始化器來進行,其屬性在生成後會變成只讀;

基本上,只要是匿名類型就一定得使用 var 來聲明,若是現有的類型則要看當時情況而定,全都用 var 來替代也是有副作用的。

(P094)

var 類型雖然好用,但也有如下限制 :

1. 使用 var 類型時賦值語句的右邊不可以是 null ,否則編譯器無法推斷出其類型;

2. var 類型只能用於局部變數的聲明,不能用於全局變數、類層級的變數或是函數的返回值;

3. var 類型不可用在匿名委派或是方法群組中;

編譯器在程式中看到 foreach 語句時,會將它轉換成對 IEnumerable<T>.GetEnumerator() 的調用。

(P095)

微軟提供了一個指令 yield ,它可以讓程式員以只傳回每個元素的方式來自動生成 IEnumerabel<T> 對象。

(P096)

Enumerable 內所包含的 LINQ 擴展方法,都返回了 IEnumerable<T> ,這代表可以使用直接串接的方式來調用多個 LINQ 函數,而不用為每個函數調用都編寫一行程式,這個技術稱為 Fluent Interface。

Fluent Interface 具有三項特性 :

1. 通過調用方法來定義對象內容;

2. 對象會自我引用 (self-referential) ,且新的對象內容會和最後一個對象內容等價;

3. 通過返回 void 內容 (就是 null 或不返回最後的對象內容) 或非 Fluent Interface 的對象結束;

(P097)

事件 (event) 機制均以委派為主,所以若要在類聲明一個事件,則必定要聲明一個委派。

委派的聲明類似於抽象方法的聲明,只是將 abstract 換成 delegate 而已,不需要實現,只要聲明參數原型即可。

委派可以保證目標對象的實現方法必定符合委派所聲明的參數規格,以及返回的數據值,所以適合在需要由目標對象實現的流程,或是需要通知 (notification) 或是 發行/訂閱 (publish/subscrible) 的應用中,亦可應用於觀察者模式 (Observer Pattern) 的實現。

(P098)

到了 .NET Framework 3.5 時,微軟更將 delegate 指令拿掉,以 “=>” 指令來替代 delegate 。

Lambda 表達式分成三種,一種是表達式型 Lambda (Expression Lambdas) ,一種是語句型 Lambda (Statement Lambdas) ,另一種則是非同步型 Lambda (Asynchronous Lambdas) 。

表達式型 Lambda 的語法很簡單 : (input parameter) => expression ;

輸入參數有或沒有都可以,若沒有可直接以 “()” 來替代,若只有一個,則可以省去小括弧,但若有兩個以上參數,就必須保留小括弧。

當表達式有多行時,則要選擇語句型 Lambda ,它的語法結構和表達式型 Lambda 相似,差別就在大括弧 (input parameter) => { statements; } 。

(P099)

若語句只有一行,那麼使用表達式型 Lambda 和語句型 Lambda 只有大括弧的差別。

當 Lambda 表達式要用於非同步操作時,可使用非同步型 Lambda ,非同步型 Lambda 語法基本上和表達式語句型 Lambda 相同,差異是在聲明 Lambda 時要加上 async 指令,若在 Lambda 表達式本體內用到了其他非同步方法時,要在調用加上 await 指令。

async 和 await 指令適用於 .NET Framework 4.5 以上的版本。

(P100)

微軟在 .NET Framework 裡面放入了數個委派類型,用來簡化聲明委派的工作,像是無事件參數的委派 EventHandler ;有事件參數的委派 EventHandler<TEventArgs> ;無返回值的 Action ;有參數的 Func<TResult> ;以及設置準則的 Predicate<T> 等 5 種。

Predicate<T> 是一個特殊的通用委派,它基本上和 Func<T, bool> 是等價的,專門用來處理元素是否符合條件。

(P103)

除非是要重新組裝數據或是編寫 LINQ 語句選取數據,否則基本上用到 Select() 的機率並不高。

(P107)

GroupBy() 本身具有延遲執行的特性,而 ToLookUp() 沒有。

(P111)

如果要設置多重排序條件,請務必使用 OrderBy() 加上 ThenBy() 的組合。

(P113)

在資料庫查詢時,為了達到最佳的性能,在數據量大時要進行分頁處理 (paging) 是一件很重要的工作。

若是要在大集合內切出少量數據時,還需要有“美工刀”,這些方法的功能就是扮演著美工刀的角色 : Skip() 、 SkipWhile() 、 Take() 、 TakeWhile() 。

(P114)

Skip() 用來在集合中跳躍,讓 LINQ 核心直接將游標跳到指定的位置,而不用通過 “巡航” 來移動,在大型集合中可節省不少時間。

Take() 用來傳回集合中特定數量的元素,它會告知 LINQ 核心直接返回它所指定的元素數量,很適合使用於分頁的功能。

(P117)

針對遠程數據源,使用 Any() 來判斷有無數據是較好的選擇。

若是針對本地的集合 (數組、列表或字典類型等) ,則 Any() 和 Count() 幾乎沒有性能上的差異。

【第04章】

(P136)

當數據變動完成時,程式員只要調用 ObjectContext<T>.SaveChanges() ,就能將改變送到 EntityDataModel ,再傳入資料庫內。

(P156)

基本上,在 EF 6.0 內所有資料庫的操作 (除了 Entity Client 外) 都要經由 DbContext 來進行,也就是說,若想要用程式代碼操作 EF ,就必須要從 DbContext 派生自己的 Model 類。

若要定義在 EF 中使用的表格或視圖表,則要在 DbContext 的派生類內定義以 DBSet<T> 為來類型的屬性,屬性名稱則會決定要生成在資料庫中的數據表名稱。

(P163)

基本上,若可以用關聯來解決繼承的需求,就不要使用繼承。

(P170)

在商用系統中,存儲過程和函數的使用十分廣泛。

(P172)

無論是使用何種方式建立模型,對程式員來說,只有一個對象要關註,那就是 DbContext 類對象,所有的數據訪問動作都要通過它。

DbSet<T> 必須定義在 DBContext 的派生類內,代表數據源的一個對象,它是實現於 IDbSet<T> 介面,基本上可以將 DBSet<T> 看作是一個數據表。

(P173)

DBContext 的查詢是由 DbSet<T> 進行的,也有 DbQuery<T> 類對象的功能,DbQuery<T> 類負責將查詢的動作往下層送,下層有 ObjectQuery<T> 負責生成查詢計劃並再往下送,直到查詢被處理,得到返回值為止,所以程式員只要在 DbSet<T> 上使用 LINQ 來查詢,就能訪問資料庫。

EF 6 在對象查詢的性能上做了許多改進,因此讓應用程式的性能會更好。

【第05章】

(P191)

網址在 SEO 中擁有很高的比重,如果能有優秀的設計,那麼網址本身就是很好的關鍵詞。

(P206)

只要記住利用空字元串可以回到主層而明確指定 Area 名稱,就可以前往各個層的 Area 內。

【第06章】

(P211)

在 ASP.NET MVC 中預設的返回 ActionResult 類型,這個 ActionResult 類型本身是一個抽象類,可以返回任何實現 ActionResult 類的類型內容,換句話說,它封裝 Action 方法的結果,是 Action 方法結果的基類。

ASP.NET 目前實現了 9 種派生自 ActionResult 類的結果類型供開發者選擇。

(P213)

新添加的 View 會繼承 System.Web.Mvc.ViewPage 類, ViewPage 類提供許多有用的屬性與方法,以幫助呈現 HTML 的輸出,其中包含如 ViewData、 ViewBag、 TempData 等對象字典屬性。

(P216)

調用 HTTP POST 的 Action 方法需要額外設置 HttpPost 屬性,調用 HTTP GET 的 Action 方法也有 HttpGet 屬性。但 ASP.NET MVC 里所有 public 修飾詞的 Action 方法預設會套用 HttpGet 屬性,一般不會特別設置。

(P228)

ViewData 與 ViewBag 都有一個特性,它們都無法跨 Action 方法訪問,只能存在於當次的 HTTP 請求中。

(P229)

ViewData 會在 Action 方法調用 ViewPage 時自動傳遞過去。

dynamic 對象會略過編譯時靜態類型檢查,而解析工作會改變在運行時進行 (有錯誤也要此階段才知道) 。

(P230)

使用 ViewBag.KeyName 並將數據存儲於 ViewData 的字典中。效果等同於 ViewData ,不過因為動態的關係,性能會比 ViewData 差,就操作而言,所有特性都和 ViewData 一模一樣,但可以得到一個程式代碼輸入時的優點。

(P231)

ViewBag 屬性在輸入時使用 “對象.屬性” 的輸入方法,對於程式代碼編寫比字典更為直觀 (而且輸入更少字) 。

ViewBag 會在 Action 方法調用 ViewPage 時自動傳遞過去。

(P236)

ViewData 與 ViewBag 屬性無法跨 Action 方法傳遞數據,當需要在 Action 方法之間傳遞數據的,可採用 TempData 屬性。

(P245)

一個 ViewPage 只能聲明一個 @model 關鍵字。

(P248)

ViewModel 應該只封裝屬性, ViewModel 與 View 之間最好只有一對一的關係。

只帶屬性的 ViewModel 類本質上是一種 Data Transfer Object (DTO , 數據傳輸對象) 的應用。

(P251)

運用 Tuple 對象編寫讀取使用的程式代碼可讀性不好,但可以省下不少項目中定製化的 ViewModel 類。

(P253)

ModelBinding 是一個自動化機制,主要是通過 DefaultModelBinder 類進行自動化數據轉換工作。

(P254)

DefaultModelBinder 運行機制非常依賴 <form> 表單域的 name 屬性名稱。

DefaultModelBinder 類基本上已經可以應付實際運用中 95% 以上的需求。

(P263)

在 ASP.NET MVC 使用 DataAnnotations 另一個好處是,它是一個集成好用戶端與伺服器端的驗證環境,換句話說,雖然只是在 Model 屬性上設置驗證規則,但此驗證規則會同時在伺服器端與用戶端 (View) 生效,這省下了非常多的開發時間,同時也為伺服器提供了基本的安全數據源環境。

T4 是一種用程式代碼生成程式代碼的技術。

(P267)

在 ASP.NET MVC 5.1.1 (含 5.1.1 版本) 之後的版本, MaxLength 與 MinLength 屬性支持用戶端驗證,之前的版本只支持伺服器端驗證。

(P272)

目前 HTML 5 的 forms 的 input 類型支持 color 、 date 、 detetime 、 datetime-local 、 email 、 month 、 number 、 range 、 search 、 tel 、 time 、 url 、 week 等,具體實現的程度各瀏覽器有所差異。

(P275)

CustomValidation 屬性類只在伺服器端有效果。

(P287)

ModelState 是伺服器端一道重要的防線,可以不用瞭解它的工作原理,使用起來就是簡單的判斷式。

(P288)

如果在某些情況下,不希望 ModelState 對象被傳遞至 View ,使用 Clear 方法將 ModelState 字典清除即可。

(P291)

UpdateModel 方法 (MVC 5) 內部其實是調用 TryUpdateModel 方法 (MVC 5) 來處理, TryUpdateModel 方法 (MVC 5) 執行之後會返回一個 bool 值,而 UpdateModel 方法 (MVC 5) 則多做了一層彈出例外的動作。

(P297)

每一個 Controller 的 Action 方法操作完成後,最終結果一定要返回一個實現 ActionResult 抽象類的類型。

(P301)

CSV 簡單說就是使用逗號來分割每一個欄位數據。

(P304)

ASP.NET MVC 為避免 JSON Hijacking 攻擊,預設不允許 HTTP GET 請求。

(P317)

一個可下載的文件必須提供兩個必要信息與一個選擇性信息。第一個是要下載的文件內容,文件內容的來源由 3 個 FileResult 子類來提供。第二個是 ContentType ,是一種網際網路媒體類型 (Internet Media Type) ,當在網路上傳遞數據時,用戶端與伺服器端會溝通所要使用的 ContentType ,通常是多對一的選擇,意思是,用戶端會提供多個選項讓伺服器來選擇,伺服器端會從用戶端提供的選項中選擇其中一種支持的選項來進行響應。

(P320)

HttpPostedFileBase (System.Web 命名空間) 是一個抽象類,它可以獲取用戶端上傳的單個文件。

(P333)

ASP.NET MVC 預設執行 WebFormViewEngine 再執行 RazorViewEngine 。

(P334)

PartialViewResult 的結果不合適直接輸出,適合拿來組合或重覆組合。

(P335)

名稱按照習慣, MasterPager 會在最前方加 “_ (底線)” , PartialView 會在最前方加 “_ (底線)” 後面加上 Partial 以便區分。

(P337)

HostingEnvironment 類 (比 System.Web.Hosting 命名空間) 和 Server.MapPath 方法效果一樣,不過未來的執行 (常駐) 環境會比現在靈活許多。

(P340)

新 Authentication Filter 的執行順序優先於以往所有的 Filters 。

在信息安全上 AAA 是一種標準做法,它是 Authentication (驗證) 、 Authorization (授權) 、 Accounting (賬戶) 的縮寫。

Authentication : 確認用戶的唯一身份;

Authorization : 用戶能做什麼或不能做什麼;

(P347)

Authorization Filter (授權過濾器) 在 ASP.NET MVC 4 (含) 之前是最早執行的 Filter ,從 ASP.NET MVC 5 會在 Authentication Filter 之後執行。

(P356)

OutputCache 屬性是 ASP.NET MVC 高速緩存機制的實現,基本上是移植 Web Forms 的 @OutputCache 輸出高速緩存架構, OutputCache 屬性 (ASP.NET MVC) 唯一不支持的是 @OutputCache 的 VarByControl 屬性。

【第07章】

(P380)

Windows 進程 (Precess) 是一個執行的程式,正式地說,進程是一個系統層級用來描述一組資源和程式執行所需的記憶體份分配。對於每一個被載入到記憶體的 .exe ,在它的生命周期中操作系統會為它建立一個單獨且隔離的進程。

(P381)

每個 Windows 進程都有用於進入程式的進入點 (entry point) 的主線程 (Main Thread) 。線程是進程中的基本執行單元,換句話說 : 進程的進入點建立的第一個線程被稱為主線程。

(P382)

線程是 Windows 進程中的獨立執行單元,每個線程都有一個主線程 (在執行進入點時建立) ,並且每個線程還可以以程式方式建立新的線程。

(P388)

Task.Run 方法是 .NET Framework 4.5 提供的新方法,在 .NET Framework 4.0 可以調用 Task.Factory.StartNew 方法,可以實現相同的效果。 Task.Run 方法相當於 Task.Factory.StartNew 方法的縮寫方式。

(P393)

加入了 async 修飾詞後必須瞭解以下內容 :

1. async 修飾詞指示編譯器將 await 運算符視為一個關鍵字;

2. async 修飾詞只能使用在返回 void 、 Task 與 Task<TResult> 類型的方法上 (或 Lambda 表達式) 上;

有 async 修飾詞不一定有 await 運算符,但有 await 運算符一定有 async 修飾詞。

按照微軟的建議,開發人員自己編寫的非同步方法最好也採用 “*Async” 結尾。

【第08章】

(P412)

執行階段通過 ViewResult 執行 View 之前都會先執行 ViewStart.cshtml ,所有開發者可以在這個文件中設置屬於全站 View 的共同預設特征,如此一來就不必在每個 View 中各自指定。

(P413)

在 Views 中會發現名為 Shared 的目錄,如同其名,這個目錄是用來存放全站通用的共用型文件的,如 _Layout.cshtml 以及 Error.cshtml 。

在 View Engine 搜索 View 的演算法中,定義了多個搜索路徑, ~/Views/Shared 目錄是搜索可用 View 的最後一個嘗試。

(P414)

View 文件的配置慣例,事實上是 ASP.NET MVC 運行階段 View Engines 搜索文件的方式。

(P420)

在執行順序上, View 會被優先執行,然後被 View 引用的 Layout 執行。

(P425)

需要註意 ViewData 、 ViewBag 兩者之間並不相同,設置在 ViewBag 中的數據不會出現在 ViewData 中。

(P426)

當 ViewResult 的 ExecuteResult 被執行後會啟動 View Engine 工作,完成以下的事情 :

1. 讓系統中註冊的 View Engine (s) 根據 context 獲取應該使用的 View ;

2. 讓 View (模板程式) 與 Model (數據) 結合;

3. 產生的運行結果 (HTML) 寫到 Response 中;

(P429)

這裡所說的 Razor 內容轉換,都是調用對象的 ToString() 方法獲取結果,即便對象是一個 string 類型對象也是如此。

(P430)

開發者可以使用 “@@ (連續兩個@)” 的標記方式來讓 Razor 直接輸出為 “@” 。

(P433)

在 View 里定義預期的 Model ,使用的是 @model 指示詞。

(P434)

Model 只能有一個類型,所以 @model 指示詞也只能在 View 中出現一次。

在 View 裡面使用到類庫時,與編寫一般類時相同,必須引入該類庫的名稱空間,在 View 裡面使用 @using 來導入該名稱空間,指示詞不必以 “; (分號)” 結束。

Razor View Engine 提供定義全站 View 引用 namespace 的地方,它預設存在 ~/Views/web.config 中。

Razor 使用 @section 來將內容 “填入” 到 Layout 額外提供的保留區段。

(P443)

Helpers 在 ASP.NET MVC 中的協助開發角色占據重要位置,並且不同用途的 Helper 由 ASP.NET MVC Framework 中直接提供,主要有三個 Helper : UrlHelper 、 HtmlHelper 、 AjaxHelper 。

在開發 View 時可分別使用 Url 、 Html 、 Ajax 等屬性來獲取 UrlHelper 、 HtmlHelper 、 AjaxHelper 的實例。

UrlHelper 的主要功能就是用來生成與特定 Controller / Action 及其參數匹配的網址。

UrlHelper 的實例 (instance) 在 WebViewPage 及 Controller 中以只讀的 Url 屬性來提供,開發人員可以直接取用 Url 屬性獲得,不必自行生成。

(P445)

HtmlHelper 是在 View 中最常見到的 Helper ,可分為三大類型 : 常規類、窗體類及功能類。

HtmlHelper 的實例 (instance) 在 WebViewPage 中以一個只讀的 Html 屬性來提供,開發人員可以直接取用 Html 屬性獲得,不必自行生成。

使用 HtmlHelper 時,有很大一部分方法依賴 Model 與 Lambda Expression ,這也是 HtmlHelper 中功能強大的部分,方法名稱中結尾為 For 的這一系列方法都是以 Lambda Expression 的方式來取代以字元串來聲明對象 (Model) 的屬性或欄位名。

(P448)

ActionLink 方法為開發者提供了最簡便的方式生成 <a> 超鏈接標簽。

(P450)

Raw 方法將輸入的字元串參數直接包裝為 MvcHtmlString 對象後返回,這樣就避免了在 Razor 的 @Expression 中會隱含調用 Html.Encode 的情況。

(P451)

由於 using { } 區塊在關閉時會調用 BeginForm 返回 MvcForm 實例的 Dispose 方法,內含的 EndForm 被調用,所以不需要自行調用 EndForm 方法。

(P465)

AjaxHelper 的實例 (instance) 在 WebViewPage 中以只讀的 Ajax 屬性來提供,開發人員可以直接取用 ajax 屬性獲得,不必自行生成。

【第10章】

(P525)

Elmah 管理外來因素造成的錯誤收集與管理, NLog 管理內部錯誤的收集與管理。

【第11章】

(P552)

在密碼存儲上,應當採取哈希的方式,在存儲與更新之前,明文密碼一律使用哈希加密,然後才可以存儲進資料庫。

(P553)

ASP.NET 加密演算法絕大部分集中在 System.Security.Cryptography 命名空間。

(P554)

AES 類是 ASP.NET 官方所推薦的對稱加密演算法。

哈希演算法是單向函數,主要用於驗證數據的完整性,無法逆向解出原始明文數據。

哈希函數可接受任意長度的明文數據,但會生成固定長度的加密文。

【第13章】

(P623)

在 JSON 里表示一個 Object 需符合以下條件 :

1. 以 { (左大括弧) 開始,以 } (右大括弧) 結尾;

2. 每個名稱後跟著一個 : (冒號) ;

3. 多個 “名稱 : 值” 之間用 “,” (逗號) 分隔;

在 JSON 里表示一個 Array 需符合以下條件 :

1. 以 [ (左括弧) 開始,以 ] (右括弧) 結尾;

2. 值與值之間使用 “,” 分隔;

【第14章】

(P637)

敏捷開發期望的是,每一次的需求變動,都是軟體開發的動力,而每一次的變動,都是質量的累積,並使得產品更符合用戶的需求。


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

-Advertisement-
Play Games
更多相關文章
  • 當大潮退去,才知道誰在裸泳。 作者 :A哥(YourBatman) 公眾號 :BAT的烏托邦(ID:BAT utopia) 文末是否有彩蛋 :有 [TOC] 前言 各位小伙伴大家好,我是A哥,一個前25年還不會寫Hallo World的半殘程式猿。也許你看到這個介紹心裡一陣美滋滋: 卧槽,終於有一個 ...
  • 世界分為24個時區(間隔是0 23小時),我們經常見到的 UTC (世界無線電組織規定的)通用協調時間。 GMT (格林威治時間),本初子午線 0時區 英國倫敦的本地時間 UTC == GMT == 0時區 == 英國倫敦的本地時間 == 本初子午線 中國屬於東8區,其實,是占在東五區到東9區。 國 ...
  • 引導 要求:線程資源必須通過線程池提供,不允許在應用自行顯式創建線程; 說明:使用線程池的好處是減少在創建和銷毀線程上所花的時間以及系統資源的開銷,解決資源不足的問題。如果不使用線程池,有可能造成系統創建大量同類線程而導致消耗記憶體或者“過度切換”的問題。 特別要註意:光理論是不夠的,記住:Java架 ...
  • 45. 跳躍游戲 II 題目來源: "https://leetcode cn.com/problems/jump game ii" 題目 給定一個非負整數數組,你最初位於數組的第一個位置。 數組中的每個元素代表你在該位置可以跳躍的最大長度。 你的目標是使用最少的跳躍次數到達數組的最後一個位置。 示例 ...
  • 隨著 JDK 1.8 Streams API 的發佈,使得 HashMap 擁有了更多的遍歷的方式,但應該選擇那種遍歷方式?反而成了一個問題。 本文先從 HashMap 的遍歷方法講起,然後再從性能、原理以及安全性等方面,來分析 HashMap 各種遍歷方式的優勢與不足,本文主要內容如下圖所示: 這 ...
  • 主要有三種,順序、分支、迴圈。 順序控制結構 代碼從上到下,自左而右的執行,不對代碼進行任何的干預 分支控制結構 指代碼可以有多個選擇的執行,分為單分支和多分支 單分支:程式執行的流程不超過2個結構 多分支:程式執行的流程超過了2個以上的結構 if switch 多分支結構,一般只用於判斷確切的數值 ...
  • java類 一、類和對象 類(class)可以看成對具體事物的抽象特征提取。比如:人這個類,擁有器官的屬性、擁有走路、勞動、吃喝玩樂的行為等。 對象(Object, instance)可以看成具體的事物,就是類的實例。比如:小明這個人,就是人類的一個實例。 二、類 1. 類的定義 [修飾符1 修飾符 ...
  • 0. 前言 繼續之前的C IO流,在前幾篇小短片中我們大概看了下C 的基礎IO也對文件、目錄和路徑的操作有了一定的瞭解。這一篇開始,給大家演示一下流的各種操作。以文件流為例,一起來看看如何操作吧。 註:之前更新了一篇《Spring Cloud 實戰日記》,這是一個新的系列,有興趣的小伙伴可以從我的賬 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...