.net网站第一次运行的时候 执行global文件的application_start方法 注册路由信息   RouteConfig.RegisterRoutes(RouteTable.Routes);

这会把用户写的所有的路由信息添加到RouteTable.Routes表里,上一篇文章已经写过了 .net framework已经的物理配置文件 已经把一个过滤器注册到了 系统中

UrlRoutingModule : IHttpModule 这个类注册到系统,全名是 System.Web.Routing.UrlRoutingModule,并执行了它的init方法,在请求管道上注册了一个事件 如图所示

打开OnApplicationPostResolveRequestCache方法 进一步看

本章主要讲述的是路由模块 ,也就是上图第一处标记的具体实现

路由模块说白了 就是为了匹配到控制器 匹配到action 进而执行相应的操作

public RouteData GetRouteData(HttpContextBase httpContext){    if (httpContext == null)    {        throw new ArgumentNullException("httpContext");    }    if (httpContext.Request == null)    {        throw new ArgumentException(SR.GetString("RouteTable_ContextMissingRequest"), "httpContext");    }    if (base.Count != 0)    {        bool flag = false;        bool flag2 = false;        if (!this.RouteExistingFiles)        {            flag = this.IsRouteToExistingFile(httpContext);            flag2 = true;            if (flag)            {                return null;            }        }        using (this.GetReadLock())        {            foreach (RouteBase base2 in this)            {                RouteData routeData = base2.GetRouteData(httpContext);                if (routeData != null)                {                    if (!base2.RouteExistingFiles)                    {                        if (!flag2)                        {                            flag = this.IsRouteToExistingFile(httpContext);                            flag2 = true;                        }                        if (flag)                        {                            return null;                        }                    }                    return routeData;                }            }        }    }    return null;}以上代码就是GetRouteData方法的具体实现 此方法里面的this值得就是routeCollection 对象更直接就是RouteTable.Routes看到foreach循环 就是遍历路由表中的所有表 一次执行每一个路由的GetRouteData方法具体实现 如下图

其实就把url后面的字符串按"/"拆分 然后 一一比对 ~~~~~~~~~~~太困了今天就到这~~

MVC 路由模块内核原理的更多相关文章

  1. 20169212《Linux内核原理与分析》课程总结

    20169212<Linux内核原理与分析>课程总结 每周作业链接汇总 第一周作业:完成linux基础入门实验,了解一些基础的命令操作. 第二周作业:学习MOOC课程--计算机是如何工作的 ...

  2. 【深入JVM内核—原理、诊断与优化】第2期开课了

    [深入JVM内核—原理.诊断与优化]的讲师“葛一鸣”,人称“一哥”,毕业于浙江工业大学,计算机软件与理论专业硕士,是国家认证系统分析师,OCP.2012年出版过<Java程序性能优化>,荣 ...

  3. 20169212《Linux内核原理与分析》第二周作业

    <Linux内核原理与分析>第二周作业 这一周学习了MOOCLinux内核分析的第一讲,计算机是如何工作的?由于本科对相关知识的不熟悉,所以感觉有的知识理解起来了有一定的难度,不过多查查资 ...

  4. [JavaEE,MVC] Struts工作原理

    基本概念 Struts是Apache 基金会Jakarta 项目组的一个Open Source 项目,它采用MVC模式,能够很好地帮助java 开发者利用J2EE开发Web应用.和其他的java架构一 ...

  5. 20169210《Linux内核原理与分析》第二周作业

    <Linux内核原理与分析>第二周作业 本周作业分为两部分:第一部分为观看学习视频并完成实验楼实验一:第二部分为看<Linux内核设计与实现>1.2.18章并安装配置内核. 第 ...

  6. 《Linux内核原理与分析》第一周作业 20189210

    实验一 Linux系统简介 这一节主要学习了Linux的历史,Linux有关的重要人物以及学习Linux的方法,Linux和Windows的区别.其中学到了LInux中的应用程序大都为开源自由的软件, ...

  7. 2018-2019-1 20189221 《Linux内核原理与分析》第九周作业

    2018-2019-1 20189221 <Linux内核原理与分析>第九周作业 实验八 理理解进程调度时机跟踪分析进程调度与进程切换的过程 进程调度 进度调度时机: 1.中断处理过程(包 ...

  8. 2018-2019-1 20189221 《Linux内核原理与分析》第八周作业

    2018-2019-1 20189221 <Linux内核原理与分析>第八周作业 实验七 编译链接过程 gcc –e –o hello.cpp hello.c / gcc -x cpp-o ...

  9. 2018-2019-1 20189221 《Linux内核原理与分析》第七周作业

    2018-2019-1 20189221 <Linux内核原理与分析>第七周作业 实验六 分析Linux内核创建一个新进程的过程 代码分析 task_struct: struct task ...

随机推荐

  1. JavaScript中 Promise的学习以及使用

    今天一个哥们发过来一段js代码,没看懂,就顺便学习了一下,代码如下  Promise.resolve('zhangkai').then(value => {console.log(value)} ...

  2. RMAN_学习笔记5_RMAN Catalog Script恢复目录脚本

    2014-12-24 Created By BaoXinjian

  3. 【原】安装mongo的php插件

    http://pecl.php.net/package/mongo https://github.com/mongodb/mongo-php-driver/tarball/master 1. 安装mo ...

  4. 四、maya python plugin

    只是作简单的了解. 1区别 (1)Python scripts:可以在Maya的script editor 执行.用于扩展maya.cmd模块. The import statement below ...

  5. EXT学习之——EXT下拉框默认绑定第一个值

    //默认第一个下拉框绑定值if (this.moduleCombo.store.getAt(0) != undefined) { this.moduleCombo.setValue(this.modu ...

  6. Centos 6 之samba 搭建

    学习linux从实践做起. 实验环境:vmware,cenots 6,xshell 注意:使用vmware 时,网络连接设置成桥接,和宿主机位于同一个网段. 实验需求:模拟实际公司文件服务器. 新建S ...

  7. Study Emgu VoteForUniqueness

    Recently i was studying Emgu, but find there is a bug in the VoteForUniqueness function in class Fea ...

  8. mysql的从头到脚优化之数据库引擎的选择(转载)

    一. Mysql常用的存储引擎包括Innodb和Myisam以及memory引擎,但是最常用的莫过于Innodb引擎和MyISAM引擎,下边分别做下记录和比较: 下面思考下这几个问题: 你的数据库需要 ...

  9. ---Ubuntu 14.04 虚拟机器和主机时间同步

    先把vmware tool 装好! sudo /usr/bin/vmware-toolbox-cmd  timesync enable

  10. 4.0以后的新布局方式GridLayout

    <?xml version="1.0" encoding="utf-8"?> <GridLayout xmlns:android=" ...