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

《ASP.NET MVC 5 高級編程》html

========== ========== ==========
[做者] (美) Jon Galloway (美) Brad Wilson (美) K. Scott Allen (美) David Matson
[譯者] (中) 孫遠帥
[出版] 清華大學出版社
[版次] 2015年02月 第1版
[印次] 2015年02月 第1次 印刷
[訂價] 59.80元
========== ========== ==========jquery

【第01章】 程序員

(P001) web

證實軟件框架和模式價值最好的方法就是展現它們在實際場景中的應用。ajax

(P007) 編程

雖然 ASP.NET API 包含在 ASP.NET MVC 4 中,但它能夠單獨使用。事實上,它與 ASP.NET 不存在任何依賴關係,而且能夠自託管 —— 也就是說,獨立於 ASP.NET 和 IIS 。瀏覽器

(P014) 緩存

MVC 5 是徹底 bin 部署的,這意味着全部必要的程序集都包含在應用程序的 bin 目錄中。只要服務器上有 .NET 4.5 ,就能夠進行安裝。安全

【第02章】 服務器

(P023)

URL 並不與存儲在 Web 服務器磁盤上的文件有直接對應關係,而是與控制器類的方法有關。

路由子系統在前面,以後纔是控制器。

(P024)

MVC 提供的是方法調用結果,而不是動態生成的 (又名腳本) 頁面。

(P025)

在 ASP.NET MVC 中,每一個請求都被路由到控制器的一個方法 (又稱操做),該控制器全權負責解釋這些請求,若有必要,還要操縱模型,而後選擇一個視圖反饋給用戶。

(P034)

利用方法 HttpUtility.HtmlEncode 來預處理用戶輸入,這樣就能阻止用戶用連接向視圖中注入 JavaScript 代碼或 HTML 標記。

ASP.NET MVC 的默認路由約定,就是將操做方法名稱後面 URL 的這個片斷做爲一個參數,該參數的名稱爲 ID 。

【第03章】

(P036)

視圖實際上就是應用程序的 「大使」 。

(P037)

視圖老是被控制器渲染,由於控制器爲它提供了要渲染的數據。

(P039)

ViewBag 具備侷限性,可是若是隻是向視圖傳遞少許數據,它仍是頗有用的。

(P042)

能夠從控制器向視圖傳遞一個在兩端都是強類型的模型對象。

若是不想輸入模型類型的徹底限定類型名,可以使用 @using 關鍵字聲明。

對於在視圖中常用的名稱空間,一個較好的方法就是在 Views 目錄下的 web.config 文件中聲明。

(P045)

顯示 「Add View」 對話框最簡單的方法就是在操做方法上右擊。

(P049)

Razor 中的核心轉換字符是 「at」 符號 (@) 。這個單一字符用作 「標記-代碼」 的轉換字符,有時也反過來用作 「代碼-標記」 的轉換字符。

(P053)

有些狀況下,須要顯式地渲染一些不該該採用 HTML 編碼的值,這時能夠採用 Html.Raw 方法來保證該值不被編碼。

(P054)

能夠用 「@@」 來編碼 「@」 以達到顯示 「@」 的目的。

(P055)

@RenderBody 是一個佔位符,用來標記使用這個佈局的視圖將渲染它們的主要內容的位置。

【第04章】

(P062)

在 Visual Studio 中,既可使用 Build | Build Solution 菜單項,也可使用鍵盤快捷鍵 Ctrl + Shift + B 來編譯應用程序。

(P063)

基架對於建立應用程序來講不是不可或缺的,可是利用基架會爲應用程序開發節省不少時間。

(P079)

瀏覽器會自動收集用戶在表單中輸入的全部信息並將這些值 (及其相關的 name 屬性值) 放在請求中一塊兒發送。

【第05章】

(P086)

action 特性用以告知 Web 瀏覽器信息發往哪裏,因此 action 就瓜熟蒂落地包含一個 URL 。

當用戶使用 HTTP GET 請求提交時,瀏覽器會提取表單中輸入元素的 name 特性值及其相應的 value 特性值,並將它們放入到查詢字符串中。

若是不想讓瀏覽器把值放入查詢字符串中,而是想放入 HTTP 請求的主體中,就能夠給 method 特性賦值 post 。

(P087)

一般狀況下,在 Web 應用程序中, GET 請求用於讀操做, POST 請求用於寫操做 (一般包括更新、建立和刪除) 。

(P089)

能夠經過視圖的 Html 的屬性調用 HTML 輔助方法。相應地,也能夠經過 Url 屬性調用 URL 輔助方法,經過 Ajax 屬性調用 AJAX 輔助方法。全部這些方法都有一個共同的目標 : 使視圖編碼變得容易。

(P091)

在 ASP.NET MVC 框架的重載版本中,幾乎每個 HTML 輔助方法都包含 htmlAttributes 參數。

全部的 HTML 輔助方法在渲染 HTML 時會將屬性名中的下劃線轉換爲連字符。

(P093)

ValidationSummary 輔助方法能夠用來顯示 ModelState 字典中全部驗證錯誤的無序列表。

(P095)

TextBox 輔助方法渲染一個 type 特性爲 text 的 input 標籤。咱們通常利用 TextBox 輔助方法接收用戶自由形式的輸入。

(P096)

label 的做用就是爲其餘輸入元素顯示附加信息,這樣能夠爲用戶提供人性化的界面,從而加強應用程序的可訪問性。

label 的 for 特性應該包含相關輸入元素的 id 。

若是用戶單擊 label ,那麼瀏覽器會把焦點傳送給相關的輸入控件。

(P097)

當 ModelState 字典中的某一特定字段出現錯誤時,可使用 ValidationMessage 輔助方法來顯示相應的錯誤提示信息。

(P098)

輔助方法提供了對 HTML 細粒度控制的同時帶走了構建 UI (要在合適的位置顯示控件、標籤、錯誤信息和值) 的乏味工做。

在 ViewBag 對象中的全部值也能夠經過 ViewData 獲得。

(P099)

在 id 特性中包含 (.) 是非法的。

若是沒有有效的 id 特性,就沒法執行帶有 JavaScript 庫 (如 jQuery) 的客戶端腳本。

(P100)

輔助方法在查找強類型模型對象以前,會首先查看 ViewBag 。

(P101)

通常狀況下,可爲處理模型數據的每一個輔助方法找到一個與其對應的強類型方法。

(P102)

ModelState 是模型綁定的副產品,而且存儲模型綁按期間檢測到的全部驗證錯誤,以及用戶提交用來更新模型的原始值。

(P104)

CheckBox 輔助方法是惟一一個渲染兩個輸入元素的輔助方法。

ActionLink 輔助方法可以渲染一個超連接 (錨標籤) ,渲染的連接指向另外一個控制器操做。

當連接的操做所在控制器與用來渲染當前視圖的控制器同樣時,只須要指定操做的名稱。

當須要一個指向不一樣控制器操做的連接時,可經過 ActionLink 方法的第三個參數來指定控制器名稱。

(P105)

儘管 RouteLink 輔助方法和 ActionLink 輔助方法遵循相同的模式,可是 RouteLink 只能夠接收路由名稱,而不能接收控制器名稱和操做名稱。

URL 輔助方法與 HTML 的 ActionLink 和 RouteLink 輔助方法類似,但它不是以 HTML 標記的形式返回構建的 URL ,而是以字符串的形式返回這些 URL 。

(P106)

Content 輔助方法特別有用,由於它能夠把應用程序的相對路徑轉換成絕對路徑。

ASP.NET MVC 5 使用的是 Razor 的第三個版本,波浪號當出如今 script 、 style 和 img 元素的 src 特性時就會被自動解析。

RenderPartial 輔助方法與 Partial 很是類似,但 RenderPartial 不是返回字符串,而是直接寫入響應輸出流。出於這個緣由,必須把 RenderPartial 放入代碼塊中,而不能放在代碼表達式中。

【第06章】

(P116)

每一個驗證特性都容許傳遞一個帶有自定義錯誤提示信息的參數。

(P117)

默認狀況下,ASP.NET MVC 框架在模型綁定時執行驗證邏輯。

在操做方法帶有參數時,就會隱式地執行模型綁定。

也能夠利用控制器的 UpdateModel 或 TryUpdateModel 方法顯式地執行模型綁定。

【第07章】

(P129)

身份驗證是指經過使用某種形式的登陸機制來覈實用戶的身份。

受權驗證是用來覈實登陸站點的用戶是否在他們的權限內執行操做。

Authorize 特性不帶任何參數,只要求用戶以某種角色身份登陸網站。

(P133)

Authorize 特性是一個過濾器,也就是說,它能先於相關控制器操做執行。

(P137)

全局過濾器只針對 MVC 控制器操做,記住這一點很重要。它不能保障 Web Forms 、 靜態內容或其餘 ASP.NET 處理程序的安全。

(P140)

技術上講,設計 OAuth 協議是出於受權的目的,可是該協議經常被用來進行身份驗證。

(P150)

Html.Encode 是程序員最好的 「朋友」 。

(P161)

防護重複提交攻擊的最簡單方法就是,使用 [Bind] 特性顯式地控制須要由模型綁定器綁定的屬性。

[Bind] 特性既能夠放在模型類上,也能夠放在控制器操做參數中。

(P162)

避免直接綁定到數據模型也是有效防護重複提交攻擊的一種方式。它經過使用一個視圖模型 (View Model) ,只緩存容許用戶設置的屬性來阻止攻擊。

【第08章】

(P171)

ASP.NET MVC 5 中主要的 Ajax 特性要麼是基於 jQuery 構建,要麼是擴展的 jQuery 特性。

(P172)

jQuery 擅長在 HTML 文檔中查找、遍歷和操縱 HTML 元素。一旦找到元素, jQuery 就能夠方便地在其上進行操做。

jQuery 函數對象能夠用來訪問 jQuery 特性。

(P173)

當傳遞一個函數做爲第一個參數時, jQuery 就會假定這個函數是要在瀏覽器完成構建 (由服務器提供的) HTML 頁面中的文檔對象模型 (Document Object Model , DOM) 後當即執行,換句話說,這個函數在從服務器加載完 HTML 頁面以後執行。

jQuery 利用 JavaScript 的函數式編程特性,常常把建立的或傳遞的函數做爲 jQuery 方法的參數。

(P174)

選擇器是指傳遞給 jQuery 函數的、用來在 DOM 中選擇元素的字符串。

jQuery 選擇器的語法正是派生於 CSS 3.0 選擇器的語法,並在其基礎上作了一些補充。

jQuery 的 on 方法 (以及對應的 off 方法,用於取消訂閱事件) 是在 jQuery 1.7 中引入的,用於爲事件綁定提供一個統一的 API 。 on 方法取代了原來的 bind 、 live 和 delegate 方法;事實上,若是查看源代碼,可看到 bind 、 live 和 delegate 方法只是將調用傳遞給了 on 方法。

(P175)

一旦選擇了一些 DOM 元素或是在一個事件處理程序內, jQuery 就能夠很容易地操縱頁面上的元素,讀取或設置它們的特性值,添加或移除它們的 CSS 類等。

jQuery 包含了向 Web 服務器回發異步請求所需的全部功能。能夠用 jQuery 來生成 POST 請求或 GET 請求,而且當請求完成 (或出現錯誤) 時 jQuery 會發出通知。

(P182)

必須引用 jquery.unobtrusive-ajax.js 腳本,才能讓 Ajax 輔助方法的 Ajax 功能生效。若是在使用 Ajax 輔助方法時發生問題,這時應該首先檢查的地方。

能夠把腳本引用添加到應用程序的 _Layout 視圖中,也能夠僅添加到使用 Ajax 輔助方法的視圖中。除非在網站中發出大量 Ajax 請求,不然建議僅把腳本引用添加到單獨的視圖中。

(P196)

jQuery UI 多是最流行的 jQuery 插件集合,也是最流行的 NuGet 包之一。

jQuery UI 是一個包含效果和小部件的 jQuery 插件。與全部插件相似,它緊密地集成了 jQuery ,而且擴展了 jQuery 中的 API 。

【第09章】

(P215)

在操做方法級別指定路由特性時,會覆蓋控制器級別指定的任何路由特性。

(P223)

特性路由直接綁定到方法和控制器,而不是僅指定名稱,這意味着它們更加精確。

(P224)

只須要記住,除非路由提供了 controller 和 action 參數,不然 MVC 不知道爲 URL 運行哪些代碼。

【第11章】

(P272)

應用程序頻繁地使用 HTTP 和 JSON 做爲通訊渠道訪問主頁。當今的應用程序若是不能提供某種形式的遠程訪問 API 和/或 手機應用,就不能認爲它已經 「完成」 。

ASP.NET MVC 在接收表單數據生成 HTML 方面功能很是強大; ASP.NET Web API 在接收和生成像 JSON 和 XML 等結構化數據方面功能很是強大。

(P273)

Web API 直接把結果模型對象做爲響應來渲染。

(P283)

自託管和 Web 託管之間的主要區別在於路由的運行時刻 : 對於 Web 託管,ASP.NET 運行路由很是早;但在自託管情形中, Web API 運行路由的時刻就很是晚。

【第12章】

(P290)

HTML 應用程序,也與人稱之爲單頁應用程序或 SPA (Single Page Application) ,是一個複雜的事物。

管理複雜性的技術一般都是建立一個能夠隱藏複雜性的框架。

(P291)

爲何要在客戶端使用模型、視圖和控制器呢?其實和服務器端使用的緣由同樣 —— 維持代碼的順序,把不一樣功能分在不一樣的抽象中。

Web API 模板也有 ASP.NET MVC 支持,但只提供一個首頁做爲起始點。對於應用程序的需求,這樣作是很完美的。

(P293)

Angular 核心指令都有一個 「ng」 前綴,這裏 「ng」 便是 Angular 的簡寫。

「ng-app」 是 Angular 的應用程序引導指令。

「ng-app」 告知 Angular 跳入並初始化應用程序,並尋找其餘內部指令和模板來控制 DOM 節,這一過程一般被稱做編譯 DOM 。

(P298)

Angular 控制器主要用來管理 DOM 節,構建模型。只要與之關聯的 DOM 區域仍在展示, Angular 控制器就是有狀態的、存活的。

【第13章】

(P321)

ASP.NET MVC 框架充分利用了擴展方法。大部分用來在視圖中生成表單的 HTML 輔助方法都是 HtmlHelper 、 AjaxHelper 或 UrlHelper 類的擴展方法。

(P322)

依賴注入的最多見形式是構造函數注入 (constructor injection) 。

(P323)

屬性注入 (property injection) 是一種不太常見的依賴注入方式。

(P324)

依賴注入容器即是使依賴解析變得簡單的一種方式。依賴注入容器是一個能夠做爲組件工廠使用的軟件庫,它能夠自動檢測和知足裏面元素的依賴需求。依賴注入容器 API 的使用接口看起來很像服務定位器,由於請求其執行的主要操做將根據類型提供一些組件。

(P329)

視圖引擎的主要任務是把視圖的名稱轉換爲視圖實例。

【第14章】

(P343)

ASP.NET 核心基礎結構主要由 IHttpModule 和 IHttpHandler 接口,以及 HttpRequest 和 HttpResponse 等類的 HttpContext 層次結構組成。這些也是全部 ASP.NET 構建的基礎類,不管是 Web Forms 、 MVC 仍是 Web Pages 都是在其上構建。

【第15章】

(P366)

HTML 和 Ajax 輔助方法能夠訪問 ViewContext ,由於它們只能從視圖中調用,而 URL 輔助方法能夠訪問 ControllerContext ,由於它們既能夠從控制器中調用,也能夠從視圖中調用。

【第16章】

(P395)

默認基架器使用 Text Template Transformation (一般稱爲 T4) 生成代碼。 T4 是一個集成到 Visual Studio 中的代碼生成器引擎。

(P423)

使用同步管道的指導原則以下 :

1. 操做簡單或者能在短期內執行完畢;

2. 簡單性和可測試性是重要的;

3. 操做是 CPU 密集型,而非 IO 密集型;

使用異步管道的指導原則以下 :

1. 測試結果代表阻塞操做是站點性能的瓶頸;

2. 並行性比代碼簡單更重要;

3. 操做是 IO 密集型,而非 CPU 密集型;

把一個操做轉換爲一個異步操做的一些要求 :

1. 操做方法必須使用 async 修飾符標記爲異步;

2. 操做必須返回 Task 或 Task<ActionResult> ;

3. 方法中的任何異步操做使用 await 關鍵字掛起操做,直到調用完成;

相關文章
相關標籤/搜索