程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> ASP.NET MVC路由匹配檢測組件的代碼分析

ASP.NET MVC路由匹配檢測組件的代碼分析

編輯:C#入門知識

今天開始學習ASP.NET MVC,在看《ASP.NET MVC架構與實戰》時,看到有這樣一個組件 RouteMonitor.dll,覺得挺實用的,可以用來檢測Url路徑的映射匹配情況,只要在浏覽器中輸入請求地址,就可以得到匹配的情況,並且以一種友好的頁面展現給我們,如下圖所示:
 

\
圖一

於是乎,決定先自己分析一下該原理。

1. 我們都知道一個應用程序啟動是從Application_Start事件開始的,在創建一個新的ASP.NET MVC應用程序的時候,默認會在該事件中添加

RegisterRoutes(RouteTable.Routes);

接著RegisterRoutes方法裡面編寫一些路由映射的方法,將請求的URL映射到相應的控制器中。

2. 現在將Application_Start事件中改寫成這樣的代碼:
 

1 protected void Application_Start()
2 {
3     RegisterRoutes(RouteTable.Routes);
4     RouteDebugger.RewriteRoutesForTesting(RouteTable.Routes); 
5 }

 

注意到第3行的代碼,引用的就是RouteMonitor.dll的組件,通過RouteDebugger的靜態方法RewriteRoutesForTesting,並且賦予一個RouteCollection的路由集合的參數,將頁面映射到圖一的頁面,便於查看路由映射的情況。

3. 現在開始分析下RouteMonitor.dll裡面都有些什麼呢。
\
裡面包含DebugHttpHandler類,DebugRoute類,DebugRouteHandler類,RouteDebugger類,我們先看看RouteDebugger類都做了些什麼:
   1 public static class RouteDebugger
 2 {
 3     public static void RewriteRoutesForTesting(RouteCollection routes)
 4     {
 5         //可對路由集合類進行多線程同步訪問
 6         using (routes.GetReadLock())
 7         {
 8             bool flag = false;
 9             foreach (RouteBase base2 in routes)
10             {
11                 Route route = base2 as Route;
12                 if (route != null)
13                 {
14                     route.RouteHandler = new DebugRouteHandler();
15                 }
16                 if (route == DebugRoute.Singleton)
17                 {
18                     flag = true;
19                 }
20             }
21 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved