日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

ASP.NET MVC的生命周期与网址路由

發布時間:2024/4/14 asp.net 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ASP.NET MVC的生命周期与网址路由 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

網址路由(Routing)在ASP.NET MVC中有兩個主要用途,一個用途是匹配通過瀏覽器傳來的HTTP請求,另一個用途則是將適當的網址返回瀏覽器。

首先我們來看下第一個用途,也就是匹配通過瀏覽器傳來的HTTP請求。

客戶端對ASP.NET網站發出請求時,能夠通過Routing找到合適的HttpHandler來處理網頁,大致的處理流程為:

圖一 客戶端對ASP.NET 網站發出請求的流程

如果HttpHandler是由MvcHandler來處理的,那么,此時就會進入ASP.NET MVC的執行生命周期,并且會找到適當的Controller與Action來對其進行處理,并將信息反饋到客戶端。

其次是將適當的網址返回瀏覽器。

網址路由的另一個用途是決定ASP.NET MVC應該輸出什么樣的網址并將其返回給瀏覽器,一般來說,跳轉地址或者在View中顯示超鏈接時,都需要參考網址路由的定義,因為這樣才能動態決定ASP.NET MVC輸出的網址應該是什么。我們接下來看個例子,假如首先默認網址路由。

Public static void RegisterRoutes(RouteCollection routes) {routes.IgnoreRoute(“{resource}.axd/{*pathInfo} ”);routes.MapRoute( “Default”,“{controller}/{action}/{id}”,new {controller =”home”,action =”Index”,id =UrlParameter.Optional } );} protected void Application_Start() {AreaRegistration.RegisterAllAreas();RegisterRoutes(RouteTable.Routes); }

在這里我們定義了如下兩個默認的網址路由:

  • IgnoreRoute

    設定*.axd等格式的網址路徑不通過ASP.NET MVC執行。例如,ASP.NET內置的Trace.axd文件或其他默認的HttpHandler對象都不通過ASP.NET MVC進行處理。

  • MapRoute

    MapRoute()方法是定義ASP.NET MVC網址路由最主要的方式,每一個路由都定義了以下3個參數:

    • 路由名稱。
    • 對網址路徑如何對應到控制器、動作與路由值的設定。
    • 控制器、動作和其他路由值的默認值。
  • 通過這個默認的MapRoute()方法可以得知,在瀏覽器的地址欄輸入“http://localhost/Home/About”時,通過Routing的對應,由于網址路徑的一部分為“Home/About”,所以會對應出“{controller}”為“Home”,“{action}”為“About”。因此,ASP.NET MVC會先進入“Controllers”目錄,找到Home控制器(也就是HomeController.cs文件),然后再找到這個控制器內的About公開方法啊(Public Method)。這個公開方法就是MVC的Action,也就是實際執行網頁主要程序的入口。

    當我們在瀏覽器的地址欄中輸入“http://localhost”來訪問網站首頁時,通過Routing的對應,由于網址路徑部分沒有任何內容,所以會使用MapRoute()方法的第三個參數所設定的默認值來代替。因此,會先進入“Controllers”目錄,找到Home控制器,然后再找到Index公開方法,并進一步執行ASP.NET MVC的所有過程。

    由于我們默認定義了兩個網址路由,按照ASP.NET Routing的規則,當HTTP提出請求后,URL會進行網址路由的對比,而且是由上而下地一條一條匹配,直到符合HTTP請求的網址為止。

    1、例如:http://localhost/Trace.axd/a/b/c/d/e

    匹配的順序

    (1) 匹配 routes.IgnoreRoute命名空間的“{resource}.axd/{*pathInfo} ”網址格式。

    (2) {resource}.axd匹配到“Trace.axd”,因此繼續匹配下一個RouteValue表達式。

    (3) 匹配“{*pathInfo}”,得到“a/b/c/d/e”。

    (4) 因為所有的RouteValue表達式都匹配成功,所有該HTTP請求會由此網址路由提供服務。

    匹配結果

    該網址使用routes.IgnoreRoute命名空間進行處理,也就是說,ASP.NET MVC為忽略此請求,改以ASP.NET 架構本身繼續處理。

    2、例如:http://localhost/Member/Detail?id=123

    匹配的順序

    (1) 匹配routes.IgnoreRoute命名空間的“{resource}.axd/{*pathInfo} ”網址格式。

    (2) 匹配請求的URL的第1個部分,即“Member”,由于沒有匹配到“{resource}.axd”,所以匹配失敗。

    (3) 跳轉到routes.MapRoute命名空間的“{controller}/{action}/{id}”網址格式。

    (4) 匹配請求的URL的第1個部分,即“Member”,并且匹配到{controller}參數。

    (5) 匹配請求的URL的第2個部分,即“Detail”,并且匹配到{ action }參數。

    (6) 接下來的“?id=123”就不算是網址的一部分了,所以它不會被算進到RouteValue表達式中,因此不會再對它進行匹配。

    (7) “{id}”部分因為沒有匹配到,所以會讀取默認值,也就是“UrlParameter.Optional”部分。由于存在默認值,所以也算匹配成功。

    (8) 因為所有的RouteValue表達式都匹配成功,所以這次的HTTP請求會由此網址路由提供服務。

    匹配結果

    該網址使用routes.MapRoute命名空間進行處理,并通過MvcHandler將值賦予適當的Controller和Action程序。在這里會對應MemberController的Detail動作。

    為網址路由加上限制條件:

    ?MapRoute()是最常用來定義Routing規則的輔助方法,它其實還有許多應用方式(重載)。最常見的應用方式為“樣式比對規則(正則表達式)+限制條件”,下面舉例說明:
    ?routes.MapRoute(
    ??????????????? "Default", // 路由名稱
    ??????????????? "{controller}/{action}/{id}", // 帶有參數的 URL
    ??????????????? new { controller = "Guestbook", action = "Index", id = UrlParameter.Optional }, // 參數默認值
    ??????????????? new { id = @"\d+" }
    ??????????? );

    ?我們在輔助方法中設置了第四個參數,這些參數指定了一個匿名對象,其中ID屬性就是我們對比{id}路由值的限制條件,其限制條件使用正則表達式來表示,“\d+”表示路由值必須為

    數字的時候才算比對成功,比如你的網址“http://localhost/Order/Member/Index/123abc”就會對比失敗。

    總結

    以上是生活随笔為你收集整理的ASP.NET MVC的生命周期与网址路由的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。