下面分層次的總結Controller 處理流程:
1. 頁面處理流程
發送請求 –> UrlRoutingModule捕獲請求 –> MvcRouteHandler.GetHttpHandler() –>
MvcHandler.ProcessRequest()
2.MvcHandler.ProcessRequest() 處理流程:
使用Factory 方法擷取具體的Controller –> Controller.Execute() –> 釋放Controller對象
3.Controller.Execute() 處理流程
擷取Action –> 調用Action方法擷取返回的ActionResult –> 調用ActionResult.ExecuteResult() 方法
4.ActionResult.ExecuteResult() 處理流程
擷取IView對象-> 根據IView對象中的頁面路徑擷取Page類-> 調用IView.RenderView() 方法(內部調用
Page.RenderView方法)
通過對MVC原始碼的分析,我們瞭解到Controller對象的職責是傳遞資料,擷取View對象(實現了IView介面的
類),通知View對象顯示.
View對象的作用是顯示.雖然顯示的方法RenderView()是由Controller調用的,但是Controller僅僅是一個"
指揮官"的作用, 具體的顯示邏輯仍然在View對象中.
需要注意IView介面與具體的ViewPage之間的聯絡.在Controller和View之間還存在著IView對象.對於
ASP.NET程式提供了WebFormView對象實現了IView介面.WebFormView負責根據虛擬目錄擷取具體的Page類,然
後調用Page.RenderView().
類名 抽象類別 父類 功能
ContentResult 根據內容的類型和編碼,資料內容.
EmptyResult 空方法.
FileResult abstract 寫入檔案內容,具體的寫入方式在衍生類別中.
FileContentResult FileResult 通過 檔案byte[] 寫入檔案.
FilePathResult FileResult 通過 檔案路徑 寫入檔案.
FileStreamResult FileResult 通過 檔案Stream 寫入檔案.
HttpUnauthorizedResult 拋出401錯誤
JavaScriptResult 返回javascript檔案
JsonResult 返回Json格式的資料
RedirectResult 使用Response.Redirect重新導向頁面
RedirectToRouteResult 根據Route規則重新導向頁面
ViewResultBase abstract 調用IView.Render()
PartialViewResult ViewResultBase 調用父類ViewResultBase 的ExecuteResult方法.
重寫了父類的FindView方法.
尋找使用者控制項.ascx檔案
ViewResult ViewResultBase 調用父類ViewResultBase 的ExecuteResult方法.
重寫了父類的FindView方法.
尋找頁面.aspx檔案
Filter的具體生存周期
這是官方站的一資料.
來自controller虛方法 的OnActionExecuting .
應用於當前Controller的Filter中的OnActionExecuting:
先執行基類的,後執衍生類別的
執行應用於Action的Filter的OnActionExecuting順序:
先執行基類的,後執衍生類別的
Action 方法
應用於Action的Filter的OnActionExecuted 的執行順序
先執行衍生類別的,後執行基類的
應用於當前Controller的Filter中的OnActionExecuted方法
先執行衍生類別的,後執行基類的
Controller中的虛方法 OnActionExecuted
介紹
System.Web.Routing - 此命名空間提供用於 URL 路由的類,通過該類可以使用不映射到物理檔案的 URL
IRouteHandler - 路由處理常式介面,自訂的路由處理常式都要實現這個介面
RequestContext - 封裝所請求的路由的相關資訊和當前的 http 上下文資訊
RouteData - 所請求的路由的相關資訊
RouteCollection - 路由集合
RouteValueDictionary - 不區分大小寫 key/value 字典表
Route - 路由的相關資訊