ASP.NET MVC源码分析
MVC4 源码分析(Visual studio 2012/2013)
HttpModule中重要的UrlRoutingModule
9:this.OnApplicationPostResolveRequestCache);
10:this.PostResolveRequestCache(context);
IRouteHandler routeHandler = routeData.RouteHandler; //根据路由数据创建出了MvcRouteHandler
IHttpHandler httpHandler = routeHandler.GetHttpHandler(requestContext);
根据MvcRouteHandler创建出了MvcHandler:IHttpHandler(MvcHandler实现了IHttpHandler接口,接下来就要进入MVC源代码分析)
在MVC4源代码src文件夹System.Web.Mvc类库下
MVC4百度云源代码:链接:http://pan.baidu.com/s/1pLDvXB9 密码:4tiv
Reflector7百度云盘:链接:http://pan.baidu.com/s/1eSm9Y06 密码:gyx0
1:routeHandler.GetHttpHandler(requestContext);
2:MvcHandler.cs ProcessRequest方法
通过工厂模式创建MVC中的Controller控制器,然后执行Execute方法
3:controller.Execute(RequestContext);
IController是接口,需要找具体实现类(之前通过工厂模式创建Controller控制器,优先去找Controller类)
Controller : ControllerBase //Controller并没有实现IController接口,找其父类
ControllerBase : IController //ControllerBase实现了IController接口
4:ExecuteCore() //Controller类中
5:ActionInvoker.InvokeAction(ControllerContext, actionName)方法
ControllerActionInvoker : IActionInvoker //ControllerActionInvoker 实现了IActionInvoker 接口
6:InvokeActioin
1:InvokeActionMethodWithFilters
1.1:InvokeActionMethod
2:InvokeActionResultWithFilters
2.1:InvokeActionResultFilterRecursive
2.2:InvokeActionResult
7:actionResult.ExecuteResult(controllerContext);
ViewResult : ViewResultBase //ViewResult 并没有实现ActionResult接口,找其父类
ViewResultBase : ActionResult //ViewResultBase实现了ActionResult接口
8:View.Render(viewContext, writer); 渲染View视图【WebForm.aspx视图引擎】
WebFormView : BuildManagerCompiledView //WebFormView 并没有实现IView接口,找其父类
BuildManagerCompiledView : IView //BuildManagerCompiledView实现了IView接口
8.1:BuildManagerCompiledView (WebForm.aspx视图引擎模式)
RenderView为抽象类,由其子类实现具体方法内容
执行ASP.NET 页面生命周期ProcessRequest方法,把后续第13/第14等事件执行完毕,然后把Render渲染好的所有html代码返回给浏览器
Application 19事件
ASP.NET MVC源码分析
1:获取ControllerFacotry,根据上下文反射Controller对象
在Mvchandler的PR方法中
2:调用controller.Execute方法
在MvcHandler的PR方法中
3:调用ActionInvoker.InvokeAction方法
当前Controller类 -->ControllerBase类的Execute方法-->Controller类的ExecuteCore方法
4:调用InvokeActionResultWithFilter
ActionInvoker对象为ControllerActionInvoker类的实例
5:调用actionResult.ExecuteResult
6:调用View.Render方法,将页面渲染到输出流中
ViewResult类-->ViewResultBase类
当一个asp.net mvc应用程序提出请求,为了响应请求,包含一些请求执行流程步骤!在asp.net mvc应用程序Http request和Http Response过程中,
主要包含8个步骤:
1>RouteTable(路由表)的创建
2>UrlRoutingModule 请求拦截
3>Routing engine 确定route
4>route handler 创建相关的IHttpHandler实例
5>IHttpHandler实例确定Controller(控制器)
6>Controller执行
7>一个视图引擎创建
8>视图呈现
最新文章
- AJAX实现简单的注册页面异步请求
- sum data
- R画图中英文字体完美解决方案
- Linux跨服务器拷贝文件详解
- 在为知笔记中使用JQuery
- Asp.net Core WebApi 返回JSON自动驼峰格式化问题
- java集合学习一
- eclipse 安装插件不生效
- ossec 常用命令及目录说明
- iOS 面试题集合
- 第七届河南省赛F.Turing equation(模拟)
- 神经网络BP算法C和python代码
- [文学阅读] METEOR: An Automatic Metric for MT Evaluation with Improved Correlation with Human Judgments
- SSM框架开发web项目系列(三) MyBatis之resultMap及关联映射
- Python 项目实践三(Web应用程序)第一篇
- H5 音频标签自定义样式修改以及添加播放控制事件
- Android简易实战教程--第四十五话《几种对话框》
- Zookeeper + Dubbo + SpringMVC + dubbo-admin
- const 和 const_cast
- 基于jquery地图特效全国网点查看代码
热门文章
- JOHN W. TUKEY: HIS LIFE AND PROFESSIONAL CONTRIBUTIONS
- Delphi XE中类成员的访问权限(新增了strict private和strict protected,还有automated)
- Win8下在Vmware11中安装使用苹果系统OS X 10.10
- [Android学习笔记]startActivityForResult和onActivityResult的使用
- oracle 密码文件文件
- ZXing拍摄代码扫描之后以区分一维码、二维码、其他代码
- Android----------WindowManager
- Hadoop Hive与Hbase关系 整合
- Servlet(七)生成验证码
- Struts2第一个工程helloStruts极其基本配置