2、執行Controller與Action
3、執行View並返回結果
在使用MVC中是由IgnoreRoute()輔助方法對比成功的,會導致程序直接跳離MVC的執行生命周期,將程序繼續執行的權利交回給IIS,由IIS決定接下來應該由哪個模塊或哪個處理例程(Handler)來執行。
階段 |
詳細 |
接收應用程序的第一次請求 |
在Global.asax文件中, Route對象 被添加到RouteTable對象. |
執行路由選擇 |
UrlRoutingModule 模塊使用第一個在RouteTable 集合中匹配的Route 對象來創建RouteData對象, 然后它將使用這個RouteData對象來創建RequestContext (IHttpContext)對象. |
創建MVC request handler |
MvcRouteHandler 創建MvcHandler類的一個實例,並且將它傳遞給RequestContext實例. |
創建controller |
MvcHandler對象使用RequestContext實例來確認IControllerFactory 對象(DefaultControllerFactory類的一個實例) ,以用來創建conteoller實例。 |
執行controller |
MvcHandler 實例調用controller的執行method. |
調用action |
大部分controllers 繼承自Controller基礎類. 與controller相關聯的ControllerActionInvoker 對象決定這個controller類的哪個方法將被調用 , 然后再調用那個方法. |
執行result |
大部分controllers 繼承自Controller基礎類. 與controller相關聯的ControllerActionInvoker 對象決定這個controller類的哪個方法將被調用 , 然后再調用那個方法. |
Routing:
Routing表示網址路由,在MVC中的作用:
1、 比對通過瀏覽器傳來的HTTP;
2、 將適當的網址返回瀏覽器;
如果HttpHandler是由MVCHandler來處理的,那么就會進入MVC的執行聲明周期,並會找到適當的Controller與Action來對其進行處理,並將信息反饋給客戶端。
換句話說,Routing模塊的責任是將傳入的瀏覽器請求映射為特有的MVC controller actions。
Global.asax中定義網址路由
- public class MvcApplication : System.Web.HttpApplication
- {
- public static void RegisterRoutes(RouteCollection routes)
- {
- routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
- routes.MapRoute(
- "Default", // 路由名稱
- "{controller}/{action}/{id}", // 帶有參數的URL
- new { controller = "Home", action = "Index", id = UrlParameter.Optional } // 參數默認值
- );
- }
- protected void Application_Start()
- {
- AreaRegistration.RegisterAllAreas();
- RegisterRoutes(RouteTable.Routes);
- }
- }
a、所有的ASP.NET Web應用程序執行的入口是HttpApplication的Application_Start()方法,這個方法被調用時會反過來調用RegisterRoutes()方法。其中RouteTable.Routes是一個公開的靜態對象,用於存儲所有的Routing的規則集(RouteCollection類)
b、IgnoreRoute輔助方法,用於定義不需要通過Routing處理的網址,設定*.axd等格式的網址路徑不通過mvc執行。
c、Default為Route的名稱,這里需要注意的是網址不能已"/"開頭。
假如,你在網頁瀏覽器的地址欄中鍵入下面的url:/Home/Index/3,這個默認的route會將這個url映射為下面的參數:
controller = Home |
controller名稱 |
action = Index |
controller action |
id = 3 |
id的參數 |
當你請求/Home/Index/3這樣的url,下面的代碼將執行。HomeController.Index(3)。 這個默認的route包含3個默認的參數。如果你沒有提供一個 controller,那么 controller默認為Home。同樣,action默認為Index,id參數默認為空字符串。
當然有的時候我們需要特定的routing需求,那樣的話,我們就需要創建一個自定義的route。
最后就是順序很重要,越靠前的,越先調用。