当前位置:编程学习 > asp >>

ASP.NET MVC路由匹配检测组件的代码分析

今天开始学习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 
补充:软件开发 , C# ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,