[注意:本主題是預(yù)發(fā)布的文檔,在將來(lái)發(fā)布的版本中可能會(huì)有更改??瞻字黝}是為將來(lái)預(yù)留的。]
發(fā)送給基于 ASP.NET MVC 的 Web 應(yīng)用程序的請(qǐng)求首先通過(guò) UrlRoutingModule 對(duì)象(一個(gè) HTTP 模塊)進(jìn)行傳遞。此模塊將分析請(qǐng)求并執(zhí)行路由選擇。UrlRoutingModule 對(duì)象將選擇與當(dāng)前請(qǐng)求匹配的第一個(gè)路由對(duì)象。(路由對(duì)象是實(shí)現(xiàn) RouteBase 的類(lèi),并且通常是 Route 類(lèi)的實(shí)例。)如果任何路由都不匹配,則 UrlRoutingModule 對(duì)象不執(zhí)行任何操作,并允許請(qǐng)求回退到常規(guī)的 ASP.NET 或 IIS 請(qǐng)求處理流程。
從選定的 Route 對(duì)象中,UrlRoutingModule 對(duì)象將獲得一個(gè)對(duì)象,所獲得的對(duì)象將實(shí)現(xiàn) IRouteHandler 接口并與 Route 對(duì)象關(guān)聯(lián)。通常,在 MVC 應(yīng)用程序中,這將是 MvcRouteHandler 類(lèi)的一個(gè)實(shí)例。MvcRouteHandler 實(shí)例將創(chuàng)建一個(gè)實(shí)現(xiàn) IHttpHandler 接口的 MvcHandler 對(duì)象。然后,MvcHandler 對(duì)象會(huì)選擇將最終處理該請(qǐng)求的控制器。有關(guān)更多信息,請(qǐng)參見(jiàn) ASP.NET 路由。
![]() |
---|
如果 ASP.NET MVC Web 應(yīng)用程序運(yùn)行在 IIS 7.0 中,則 MVC 項(xiàng)目不需要文件擴(kuò)展名。但是,在 IIS 6.0 中,處理程序要求將 .mvc 文件擴(kuò)展名映射到 ASP.NET ISAPI DLL。 |
UrlRoutingModule 和 MvcRouteHandler 類(lèi)是 ASP.NET MVC 框架的入口點(diǎn)。它們執(zhí)行下列操作:
-
選擇 MVC Web 應(yīng)用程序中合適的控制器。
-
獲取特定的控制器實(shí)例。
-
調(diào)用該控制器的 Execute 方法。
下表列出了 MVC Web 項(xiàng)目的執(zhí)行階段。
階段 | 詳細(xì)信息 |
---|---|
接收對(duì)應(yīng)用程序的第一個(gè)請(qǐng)求 | 在 Global.asax 文件中,Route 對(duì)象將添加到 RouteTable 對(duì)象中。 |
執(zhí)行路由 | UrlRoutingModule 模塊使用 RouteTable 集合中第一個(gè)匹配的 Route 對(duì)象來(lái)創(chuàng)建 RouteData 對(duì)象,然后使用所創(chuàng)建的對(duì)象創(chuàng)建 RequestContext 對(duì)象。 |
創(chuàng)建 MVC 請(qǐng)求處理程序 | MvcRouteHandler 對(duì)象將創(chuàng)建 MvcHandler 類(lèi)的實(shí)例,并將 RequestContext 實(shí)例傳遞給處理程序。 |
創(chuàng)建控制器 | MvcHandler 對(duì)象使用 RequestContext 實(shí)例標(biāo)識(shí)用于創(chuàng)建控制器實(shí)例的 IControllerFactory 對(duì)象(通常是 DefaultControllerFactory 類(lèi)的實(shí)例)。 |
執(zhí)行控制器 | MvcHandler 實(shí)例調(diào)用控制器的 Execute 方法。 |
調(diào)用操作 | 對(duì)于從 ControllerBase 類(lèi)繼承的控制器,與該控制器關(guān)聯(lián)的 ControllerActionInvoker 對(duì)象將決定要調(diào)用的 controller 類(lèi)的操作方法,然后調(diào)用該方法。 |
執(zhí)行結(jié)果 | 操作方法將接收用戶輸入,準(zhǔn)備合適的響應(yīng)數(shù)據(jù),然后通過(guò)返回結(jié)果類(lèi)型來(lái)執(zhí)行結(jié)果。可執(zhí)行的內(nèi)置結(jié)果類(lèi)型包括:ViewResult(呈現(xiàn)視圖并且是最常用的結(jié)果類(lèi)型)、RedirectToRouteResult、RedirectResult、ContentResult、JsonResult、FileResult 和 EmptyResult。 |