mvc5 源码解析1:UrlRoutingModule
注册在C:\Windows\Microsoft.NET\Framework\v2.0.50727\CONFIG \webconfig中

在该module源码中

我们可以看出注册了application中的PostResolveRequestCache事件

在这个方法中定义了context上下文为httpcontextWrapper类型

在具体的方法中分4步
(1) 从路由集合this.RouteCollection中获取routedata
而 RouteCollection

是一个全局性的静态路由表,而这个RouteTable.Routes 的值又从哪里来呢?
在我们的mvc项目中Global.asax全局文件中

这个就是我们在mvc项目中注册的路由表

从routes.MapRoute方法中可以看出来返回值为Route的集合

在返回到urlroutingmodule中GetRouteData方法

我们会循环这个集合从集合中获取第一个请求路由对应的routedata
查看routebase对应的GetRouteData 方法

发现这是一个抽象方法
在项目中注册路由的时候都是Route的集合,而route正好是routebase的子类
所以到route类中查找getRoutedata方法

在route类中RouteHandler属性都是在构造函数中注入的,所以我们到在项目中注册的类中查找

在这个类中

所以对应的handlerhandler为mvcRouteHandler
(2) 获取到对应的routehandler,从(1)中可知routehandler 为mvcRouteHandler
(3)获取处理请求的handler 从mvcRoutehandler中可知

返回一个mvchandler
(4) 映射handler

查找子类httpContextWrapper中实现的方法

从上文中知道 httpContextWrapper 的context属性为application中httpcontext

已将mvchandler映射到httpcontext上下文中。
mvc5 源码解析1:UrlRoutingModule的更多相关文章
- mvc5 源码解析2-1:mvchandler的执行
上一节说在urlroutingmodule中mvchandler 映射到httpcontext上,那mvchandler又是怎么执行的呢? (1).httpruntime 从isapiruntime ...
- mvc5 源码解析2-2 mvchandler的执行
我们从application获取的时候查看stepmanager的实现类 IHttpHandler applicationInstance = HttpApplicationFactory.GetAp ...
- [ASP.NET]分析MVC5源码,并实现一个ASP.MVC
本节内容不是MVC入门教程,主要讲MVC原理,实现一个和ASP.NET MVC类似基本原理的项目. MVC原理是依赖于ASP.NET管道事件基础之上的.对于这块,可阅读上节内容 [ASP.NET]谈谈 ...
- 【原】Android热更新开源项目Tinker源码解析系列之三:so热更新
本系列将从以下三个方面对Tinker进行源码解析: Android热更新开源项目Tinker源码解析系列之一:Dex热更新 Android热更新开源项目Tinker源码解析系列之二:资源文件热更新 A ...
- 【原】Android热更新开源项目Tinker源码解析系列之一:Dex热更新
[原]Android热更新开源项目Tinker源码解析系列之一:Dex热更新 Tinker是微信的第一个开源项目,主要用于安卓应用bug的热修复和功能的迭代. Tinker github地址:http ...
- 【原】Android热更新开源项目Tinker源码解析系列之二:资源文件热更新
上一篇文章介绍了Dex文件的热更新流程,本文将会分析Tinker中对资源文件的热更新流程. 同Dex,资源文件的热更新同样包括三个部分:资源补丁生成,资源补丁合成及资源补丁加载. 本系列将从以下三个方 ...
- 多线程爬坑之路-Thread和Runable源码解析之基本方法的运用实例
前面的文章:多线程爬坑之路-学习多线程需要来了解哪些东西?(concurrent并发包的数据结构和线程池,Locks锁,Atomic原子类) 多线程爬坑之路-Thread和Runable源码解析 前面 ...
- jQuery2.x源码解析(缓存篇)
jQuery2.x源码解析(构建篇) jQuery2.x源码解析(设计篇) jQuery2.x源码解析(回调篇) jQuery2.x源码解析(缓存篇) 缓存是jQuery中的又一核心设计,jQuery ...
- Spring IoC源码解析——Bean的创建和初始化
Spring介绍 Spring(http://spring.io/)是一个轻量级的Java 开发框架,同时也是轻量级的IoC和AOP的容器框架,主要是针对JavaBean的生命周期进行管理的轻量级容器 ...
随机推荐
- SpringMVC学习笔记一(请求流程和配置,启动项目)
springmvc请求流程: 1.用户发送请求至前端控制器DispatcherServlet 2.DispatcherServlet收到请求调用HandlerMapping处理器映射器. 3.处理器映 ...
- PHP mysqli_kill MySQLi 函数
mysqli_kill - 让服务器杀掉一个 MySQL 线程 语法:mysqli_kill ( mysqli $link , int $processid ) 本函数可以用来让服务器杀掉 proce ...
- python生产者和消费者模式实现(一)普通方式
import timeimport randomfrom multiprocessing import Queue # 生产者def producer(q, num): for i in range( ...
- JavaScript—字符串(String)用法
字符串(String)去除空格 str = " hello python " // 去除左空格: str=str.replace( /^\s*/, ''); // 去除右空格: s ...
- [Go] gocron源码阅读-go语言中的切片接口和类型综合
// getCommands func getCommands() []cli.Command { command := cli.Command{ Name: "web", Usa ...
- 5-7 可视化库Seaborn-热度图绘制
In [1]: %matplotlib inline import numpy as np import matplotlib.pyplot as plt import seaborn as sns ...
- Hadoop序列化案例实操
需求 统计每一个手机号耗费的总上行流量.下行流量.总流量. 输入数据: 1 13736230513 192.196.100.1 www.atguigu.com 2481 24681 200 2 138 ...
- 02-Django项目创建
第一.Django项目创建 django-admin startproject 项目名 # 注意如果使用虚拟环境,创建应用必须先进入虚拟环境 进入项目目录,tree看项目结构(此时提示tree com ...
- GitHub如何配置SSH Key
https://github.com/xiangshuo1992/preload.git git@github.com:xiangshuo1992/preload.git 这两个地址展示的是同一个项目 ...
- Jmeter请求
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:web=& ...