asp.net MVC 源码分析
先上一张图吧 asp.net请求机制的图 by传智播客邹华栋老师
然后是 邹老师添加MVC请求过程的图

其实MVC 是在.netframework上加了一个过滤器 HttpModule 在C:\Windows\Microsoft.NET\Framework\v4.0.30319
下的配置文件里加入的 <add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" />
网站在第一次请求的时候会把这个类 创建出来调用其Init()方法 注册到事件管道上
1浏览器通过报文发送http请求 到服务器IIS
2IIS 把请求交给扩展模块ASPNET_ISAPI.dll (C++写的非托管程序,相当于IIS与framework的中间程序)
3 framework创建Httpcontext请求上下文 (request/response/session/application/cookie/server...)
4通过HttpApplicationFactory 工厂创建HttpApplicaiton 调用它的PR方法 (事件管道)
5 第七个事件创建MvcHanlder 存入HttpContext的私有属性remapHandler里(可以通过.net reflector看到)
6第八个事件就是判断这个remapHandler里是不是为空 如果不是为空的话就 Httpcontent.RemapHandler(mvcHandler);
7在11/12方法之间执行MvcHandler的PR方法创建控制器对象
asp.net MVC 源码分析的更多相关文章
- ASP.NET MVC源码分析
MVC4 源码分析(Visual studio 2012/2013) HttpModule中重要的UrlRoutingModule 9:this.OnApplicationPostResolveReq ...
- asp.net mvc源码分析-DefaultModelBinder 自定义的普通数据类型的绑定和验证
原文:asp.net mvc源码分析-DefaultModelBinder 自定义的普通数据类型的绑定和验证 在前面的文章中我们曾经涉及到ControllerActionInvoker类GetPara ...
- asp.net mvc源码分析-ModelValidatorProviders 客户端的验证
几年写过asp.net mvc源码分析-ModelValidatorProviders 当时主要是考虑mvc的流程对,客户端的验证也只是简单的提及了一下,现在我们来仔细看一下客户端的验证. 如图所示, ...
- ASP.NET MVC 源码分析(一)
ASP.NET MVC 源码分析(一) 直接上图: 我们先来看Core的设计: 从项目结构来看,asp.net.mvc.core有以下目录: ActionConstraints:action限制相关 ...
- asp.net mvc源码分析-Route的GetRouteData
我知道Route这里东西应该算路由,这里把它放到mvc里面有些不怎么合适,但是我想大家多数遇到路由都是在mvc的时候吧.首先我们还是来看看GetRouteData方法吧 [csharp] public ...
- asp.net mvc源码分析-Action篇 IModelBinder
我们首先还是看看ReflectedParameterBindingInfo的Binder属性吧: public override IModelBinder Binder { ge ...
- ASP.NET MVC源码分析系列
Controller下的JsonResult的ExecuteResult方法 public override void ExecuteResult(ControllerContext context) ...
- ASP.NET MVC 源码分析(二) —— 从 IRouteBuilder认识路由构建
我们来看IRouteBuilder的定义: public interface IRouteBuilder { IRouter DefaultHandler { get; set; } IService ...
- ASP.NET WebForm / MVC 源码分析
浏览器 Url:https//localhost:6565/Home/Index ,https//localhost:6565/WebForm1.aspx,请求服务器(构建请求报文,并且将请求报文发送 ...
随机推荐
- 3D数学 ---- 矩阵和线性变换[转载]
http://blog.sina.com.cn/s/blog_536e0eaa0100jn7c.html 一般来说,方阵能描述任意线性变换.线性变换保留了直线和平行线,但原点没有移动.线性变换保留直线 ...
- silverlight 鼠标事件处理
托管代码注册鼠标事件 不需要再.xaml中声明注册事件. .xaml <Ellipse Name=" Fill="Orange" Canvas.Top=" ...
- strong reference cycle in block
However, because the reference is weak, the object that self points to could be deallocated while th ...
- FW: javascripts 要不要加引号
Javascript编程风格 http://www.ruanyifeng.com/blog/2012/04/javascript_programming_style.html 作者: 阮一峰 日期: ...
- JAVA 多线程和并发学习笔记(二)
一.Java中创建线程方法 1. 继承Thread类创建线程类 定义Thread类的子类,重写该类的run()方法.该方法为线程执行体. 创建Thread子类的实例.即线程对象. 调用线程对象的sta ...
- lua 中的面向对象
lua 是一种脚步语言,语言本身并不具备面向对象的特性. 但是我们依然可以利用语言的特性,模拟出面向对象的特性. 面向对象的特性通常会具备:封装,继承,多态的特性,如何在lua中实现这些特性,最主要的 ...
- Fragment一些问题
1.使用fragment静态加载,当需要替换的时候使用replace方式是无效的....... 2.replace的容器如果是线性布局,那么将会出现之前的页面残留的情况,正确做法是使用FrameLay ...
- MySQL定时执行脚本(计划任务)命令实例
在mysql中我们可以直接进行一些参数设置让它成定时为我们执行一些任务了,这个虽然可以使用windows或者linux中的计划任务实现,但是mysql本身也能完成 查看event是否开启 复制代码 代 ...
- jquery点击添加样式,再点击取出样式
<!doctype html> <html> <head> <meta charset="utf-8"> <title> ...
- 第五百八十天 how can I 坚持
一定要稳住啊,怎么感觉心神不宁呢.哎.越是这种情况越能考验一个人吧. 说都会说,做起来真的好难啊. 今天上班一天都感觉心神不宁的.到底是哪出了问题,事情太多了.好吧,是挺多的,考研.上班,还得考虑结婚 ...