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

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

2020-09-10 09:44:23 .NET開發

《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)

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

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

標籤:ASP.NET MVC

上一篇:通過介面調取博客園文章的實作

下一篇:《ASP.NET MVC 5 高級編程》 - 學習筆記

標籤雲
其他(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