綜述:ASP.NET MVC請求處理管道



ASP.NET MVC請求處理管道股份許多共同點與傳統的ASP.NET Web表單利用IIS然而不像ASP.NET MVC Web窗體給你更多的靈活性你可以修改任何一個你自己的喜好甚至重新調整或更換部件最重要的區別是地方的路由當然你可以在傳統的ASP.NET Web表單MVC路由相似但不是默認)和控制器和過濾器擴展你的能力,更大的規模以及

本文將指導你通過這個無限擴展的請求處理管道主要討論了四個主要的步驟來幫助你抓住大的想法理解什麼是要在幕後場景

1.iis

互聯網信息服務微軟Web服務器系統作爲ASP.NET請求處理的骨幹每個HTTP請求服務器一個內核模式設備驅動程序稱爲HTTP.SYS將首先分類根據其請求的URL請求端口和IP地址的組合,然後轉發給一個已註冊的應用程序IIS網站

基本上是建立在ASP.NETASP.NET MVC的ASP.NET核心必須保證正常工作ASP.NET MVC應用程序池啓用當您創建IIS這樣一個網站一個應用程序池的設置應指定適當ASP.NET工作線程來照顧的HTTP請求你可以修改應用程序託管管線模式設置多但這方面是偏離了這篇文章的目的和不會在這裏討論

一個請求到達一個ASP.NET啓用IIS網站ASP.NET應用程序池工作線程被派遣來對付請求向每個註冊HTTP模塊,一個新的請求開始HTTP模塊NET類實現IHttpModule接口你可以連接到ASP.NET請求處理管道他們通常用於處理特定的事件,如路由信息登錄請求的生命週期

一個特別重要的HTTP模塊是由任何ASP.NET MVC應用程序的默認註冊:urlroutingmodule這個模塊是核心路由系統,請求處理管道的第二步驟中起着最重要的角色開始如果你工作MVC 2目標3.5你會發現這個模塊Web.config文件中註冊另一方面4urlroutingmoduleweb.config文件,默認配置機器廣泛引用看到它的安裝和運行可以在模塊在IIS標籤您在Internet信息服務IIS)經理現場一看

2。核心路由

system.web.routing組件調用時,urlroutingmodule介入處理一個請求路由的核心工作是關於認識和分析輸入的URL設置請求上下文的數據結構,隨後的組件可以使用任何他們希望ASP.NET MVC使用它來控制傳遞到相關MVC控制器類動作方法參數的供應

核心的ASP.NET MVC路由首先查看傳入請求的URL對一個靜態的文件(如圖像文件或磁盤上的樣式表文件如果是這樣核心路由通過把它留到IISIIS將提供客戶直接使工藝可以有效地完成

另一方面如果輸入的URL不目標磁盤上的靜態文件例如映射到一個MVC控制器核心路由系統將追究其主動配置如何處理傳入的URL

如何配置路由在一個靜態的集合稱爲system.web.routing.routetable.routes此集合中的每個條目代表一個不同的URL模式應用程序希望接受例如/商店/目錄/ {id}約束,限制每個參數的可接受的值的範圍此外每個條目將提供一個路由處理程序對象實現iroutehandler從而接管工藝的要求路由ASP.NET MVC應用程序路徑集合通常是通過添加代碼的方法稱爲registerroutes()在global.asax文件設置

以符合特定的傳入請求核心路由系統通過路由從上到下收集路線選擇相匹配的URL模式的第一項找到匹配項路由傳輸控制進入指定的路由處理器一個請求上下文的數據結構,描述了路由條目參數的URL解析MVC框架,然後在行動上

3。控制器和操作

達到這一步核心路由系統在路由選擇的特定項目。路線解析任何路由參數URL和包裝他們請求上下文數據結構裏面現在是控制器和行動進入現場的時間

在一般情況下ASP.NET MVC應用程序幾乎所有的路由條目指定一個特定的路由處理程序mvcroutehandler它是內置的默認路由處理程序的ASP.NET MVC它知道如何請求的上下文數據調用相應的控制器類這是通過使用一個控制器工廠對象默認情況下defaultcontrollerfactory使用,但是它可以通過自定義控制器工廠代替案例特別關注

提高例如依賴注入的需求

當一個相應的控制器,由控制器工廠對象選擇執行的方法被稱爲執行IController接口每個控制器類中定義的唯一方法必須實現這樣的接口

publicinterfaceicontroller

{

無效的執行requestcontextrequestcontext

}

請注意,RequestContext參數提供的所有請求的上下文數據路由系統的構建包括參數的解析,從傳入請求URL它還提供了訪問請求和響應對象

在大多數情況下,將與高層次的控制器和隱藏執行方法的底層細節IController接口定義因此,你基本上不會寫數據到響應流直接相反,返回一個行動的結果描述預期輸出你的控制器例如如果返回一個ViewResult這樣的控制器的目標是提供一個視圖redirecttorouteresult如果你想請求重定向到一個不同的動作方法或一個不同的控制器MVC框架將負責執行請求處理管道的結果在適當的時刻

請注意,過濾器可以被連接到一個控制器類一個動作方法注入額外的邏輯運行之前或之後的行動方法或前或後的行動結果的執行過濾器是非常靈活的,他們的邏輯可以運行在許多可能的時刻,在這一步的請求處理管道

總之,控制器和動作是整個ASP.NET MVC框架的中心支柱

4。行動的結果和意見

在這一點上MVC框架會問你的控制器返回的ActionResult對象執行ActionResult什麼類型的actionresultdoes要麼返回一個字符串的瀏覽器產生一個HTTP重定向或最有趣的部分來渲染一個視圖

渲染一個視圖的工作即是ViewResult ActionResult這是一個能夠定位並提供一個特別的角度,沿着任何可視數據結構作用的方法構建了它通過調用視圖引擎例如Web窗體視圖引擎MVC 2MVC 3 Razor視圖引擎由控制器確定

傳統的ASP.NET Web表單每個Web窗體ASPX頁面有一個專用的管道在其自己的,基於ASPX / ASCX編譯和運行通過一系列的事件稱爲頁面生命週期ASP.NET MVC講述一個不同的故事它的視圖頁面簡單只包含用戶界面邏輯Web窗體的文件也沒有生命週期沒有任何代碼把你從一個智能的UI設計溼地更好的架構對關注點分離

------------------------------------------------------

下面的工作流程可以幫助你更好地理解ASP.NET MVC請求處理管道



發佈了14 篇原創文章 · 獲贊 23 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章