向基於ASP.NET MVC的Web程式發送請求首先傳遞一個 UrlRoutingModule 對象,這是一個HTTP模組。這個模組解析請求並執行路由選擇。 UrlRoutingModule 對象選擇第一個匹配當前請求的路由對象。(路由對象是實現 RouteBase 的類,而且通常是 Route 類的一個執行個體。) 如果沒有任何路由匹配, UrlRoutingModule 對象就啥都不做,讓請求回到通常的ASP.NET或IIS請求處理中。
由選擇的 Route 對象, UrlRoutingModule 對象擷取由Route 分隔的 IRouteHandler 對象。在MVC程式中這通常會是一個 MvcRouteHandler的執行個體。 IRouteHandler 執行個體建立一個 IHttpHandler 對象並將它傳到IHttpContext 對象。預設情況下,用於MVC的 IHttpHandler 執行個體是 MvcHandler 對象。 MvcHandler 對象進而選擇最終處理常式的控制器。
| 注意: |
| 當ASP.NET MVC Web 程式運行在 IIS 7.0下時, MVC項目不要求檔案名稱擴充。然而,在 IIS 6.0下,需要映射.mvc檔案名稱擴充到ASP.NET ISAPI DLL。 |
模組與處理常式是 ASP.NET MVC 架構的進入點。它們執行以下操作:
- 在MVC Web程式中選擇適合的控制器。
- 擷取指定的控制器執行個體。
- 調用控制器的 Execute 方法。
下表列出了MVC Web項目執行的階段。
| 階段 |
詳細 |
| 接收程式的第一個請求 |
在 Global.asax 檔案中, Route 對象被添加到 RouteTable 對象中。 |
| 執行路由(routing) |
UrlRoutingModule 模組使用RouteTable 集合中第一個匹配的 Route 對象來建立 RouteData 對象, 然後它建立一個 RequestContext (IHttpContext) 對象。 |
| 建立MVC請求處理常式 |
MvcRouteHandler 對象建立 MvcHandler 類的一個執行個體並傳遞 RequestContext 執行個體。 |
| 建立控制器 |
MvcHandler 對象使用 RequestContext 執行個體來識別 IControllerFactory 對象(通常是一個 DefaultControllerFactory 類的執行個體) 以建立控制器執行個體。 |
| 執行控制器 |
MvcHandler 執行個體調用控制器的 Execute 方法。 |
| 叫用作業(action) |
大多數控制器繼承自 Controller 基類。因此,與控制分隔的 ControllerActionInvoker 對象決定調用哪個控制器的action方法並調用之。 |
| 執行結果 |
通常的action方法會接收使用者輸入,準備適當的響應資料,然後返回結果類型來執行結果。可以執行的內建類型包括: ViewResult (呈現視圖,最常用的結果類型), RedirectToRouteResult, RedirectResult, ContentResult, JsonResult, 和EmptyResult. |
|
原文地址:http://www.asp.net/learn/mvc/tutorial-22-cs.aspx