.NET MVC執行過程


1、網址路由比對

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中定義網址路由

 

C#代碼 復制代碼 收藏代碼
  1. public class MvcApplication : System.Web.HttpApplication
  2. {
  3. public static void RegisterRoutes(RouteCollection routes)
  4. {
  5. routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
  6. routes.MapRoute(
  7. "Default", // 路由名稱
  8. "{controller}/{action}/{id}", // 帶有參數的URL
  9. new { controller = "Home", action = "Index", id = UrlParameter.Optional } // 參數默認值
  10. );
  11. }
  12. protected void Application_Start()
  13. {
  14. AreaRegistration.RegisterAllAreas();
  15. RegisterRoutes(RouteTable.Routes);
  16. }
  17. }
  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。

最后就是順序很重要,越靠前的,越先調用。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM