Mvc 流程调用分析
链接地址 https://www.processon.com/view/link/59e71fbbe4b09000f03ce78e

总结:
1. 在Global.ascx 中我们使用RouteCollection中使用MapRoute注册了自己的RouteData,这里面就引入了IRouteHandler,也就是MvcRouteHandler
2. 在UrlRoutingModule中获取了第一步中设置的IRouteHandler(MvcRouteHandler)并获取了IHttpHandler(MvcHandler),然后使用HttpContextBase.RemapHandler() 注入了MvcHandler,然后继续管道事件的执行
3. 在MvcHandler中激活了IController.Execute()
4. ControllerBase 中对Execute进行了封装并开放了ExecuteCore方法,Controller重写ExecuteCore方法,并激活了Action的执行
5. 插一句: 激活Controller的原理大概是,RouteData.GetRequiredString()获取controllername,然后利用反射找到具体的类实例化并调用ExecuteCore方法,
激活Action的原理是RouteData.GetRequiredString()获取actionname,之前找到的Controller利用反射找到对应方法,然后执行
6. action 执行过程中,会触发ActionResult.ExecuteResult() ,普通的返回值比如Json(),File(),Content()这些比较简单,只是使用Response.Write() 配合Content-Type完成输出而已,所以图中忽略了
真正难得ViewResult,他需要加载Razor语法和数据,这个是比较复杂的
7. ViewResultBase继承自ViewResult,封装了参数检查,和渲染页面的操作,同时开发了一个FindView() 方法
在ExecuteResult中我们可以看到他找到IView之后,调用了IView.Render()完成了对Response.OutPut的修改,最终完成渲染
8. PartialViewResult 和ViewResult 都要事先FindView,而他们又是通过调用ViewEngineCollection来完成这个操作的
ViewEngineCollection其实又是对IViewEngine的一个封装,其中的Engines属性默认只有系统默认实现的两个类 RazorViewEngine,WebFormViewEngine
这里我也无法深入解析了,还不太懂,就这样吧
9. 完成了IView.Render() 之后基本上razor页面就已经在Response中了,然后按照asp.net的管道事件一直到End_Request ,然后再到浏览器接收整个报文,game over.
Mvc 流程调用分析的更多相关文章
- 基于请求响应的MVC框架调用分析
一.使用Servlet来处理请求响应 当client提交数据之后.接着发送请求,请求被封装成对象,server接收到请求,依据请求的URL.来推断将请求对象交由哪个Servlet处理. 在servle ...
- ASP.NET MVC源码分析
MVC4 源码分析(Visual studio 2012/2013) HttpModule中重要的UrlRoutingModule 9:this.OnApplicationPostResolveReq ...
- asp.net mvc源码分析-ModelValidatorProviders 客户端的验证
几年写过asp.net mvc源码分析-ModelValidatorProviders 当时主要是考虑mvc的流程对,客户端的验证也只是简单的提及了一下,现在我们来仔细看一下客户端的验证. 如图所示, ...
- 精尽Spring MVC源码分析 - 寻找遗失的 web.xml
该系列文档是本人在学习 Spring MVC 的源码过程中总结下来的,可能对读者不太友好,请结合我的源码注释 Spring MVC 源码分析 GitHub 地址 进行阅读 Spring 版本:5.2. ...
- 精尽Spring MVC源码分析 - 一个请求的旅行过程
该系列文档是本人在学习 Spring MVC 的源码过程中总结下来的,可能对读者不太友好,请结合我的源码注释 Spring MVC 源码分析 GitHub 地址 进行阅读 Spring 版本:5.2. ...
- Spring mvc源码分析系列--Servlet的前世今生
Spring mvc源码分析系列--Servlet的前世今生 概述 上一篇文章Spring mvc源码分析系列--前言挖了坑,但是由于最近需求繁忙,一直没有时间填坑.今天暂且来填一个小坑,这篇文章我们 ...
- WebForm / MVC 源码分析
ASP.NET WebForm / MVC 源码分析 浏览器 Url:https//localhost:6565/Home/Index ,https//localhost:6565/WebForm ...
- ASP.NET WebForm / MVC 源码分析
浏览器 Url:https//localhost:6565/Home/Index ,https//localhost:6565/WebForm1.aspx,请求服务器(构建请求报文,并且将请求报文发送 ...
- asp.net mvc源码分析-DefaultModelBinder 自定义的普通数据类型的绑定和验证
原文:asp.net mvc源码分析-DefaultModelBinder 自定义的普通数据类型的绑定和验证 在前面的文章中我们曾经涉及到ControllerActionInvoker类GetPara ...
随机推荐
- 团队作业8——第二次项目冲刺(Beta阶段)--第二天
团队作业8--第二次项目冲刺(Beta阶段)--第二天 会议照片: 燃尽图: 项目进展: 今天完成了记录用户的姓名,其他的任务还在跟进. 团队贡献比: 队员 角色 团队贡献比 陈麟凤 PM 16% 张 ...
- 团队作业4——第一次项目冲刺(Alpha版本)4.25
团队作业4--第一次项目冲刺(Alpha版本) Day four: 会议照片 每日站立会议: 项目进展 今天是项目的Alpha敏捷冲刺的第四天,先大概整理下昨天已完成的任务以及今天计划完成的任务.今天 ...
- Sublime Text 2 -Sidebar 背景色调整为黑色
Sublime Text 2 编辑器: Ctrl+` 输入安装代码,安装package control 插件 ctrl+shift+P : Package install 为什么装不上了呢?出现了什么 ...
- 201521123111《Java程序设计》第11周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多线程相关内容. 2. 书面作业 本次PTA作业题集多线程 互斥访问与同步访问 完成题集4-4(互斥访问)与4-5(同步访问) 1. ...
- 201521123032 《Java程序设计》第14周学习总结
0. 本周课程设计发布 Java课程设计 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多数据库相关内容. 2. 书面作业 1. MySQL数据库基本操作 建立数据库,将自己的姓 ...
- 201521123051《Java程序设计》第十三周学习总结
1. 本周学习总结 以你喜欢的方式(思维导图.OneNote或其他)归纳总结多网络相关内容. 2. 书面作业 1. 网络基础 1.1 比较ping www.baidu.com与ping cec.jmu ...
- 201521123001《Java程序设计》第11周学习总结
1. 本周学习总结 以你喜欢的方式(思维导图.OneNote或其他)归纳总结多网络相关内容. 2. 书面作业 1. 网络基础 1.1 比较ping www.baidu.com与ping cec.jmu ...
- IDEA配置Tomcat
如何用IDEA写Servlet在我别的博文有! 注意:如果不能成功启动Tomcat,很有可能是JDK版本和Tomcat版本不匹配,此时你可以降低JDK版本试试
- 《Head First Java》读书笔记(1) - Java语言基础
<Head First Java>(点击查看详情) 1.写在前面的话 这本书的知识点说实话感觉有点散乱,但是贵在其将文字转换成了生动和更容易接受的图片,大量的比喻让人感受到了知识点的有趣之 ...
- Python-老男孩-01_基础_文件IO_函数_yield_三元_常用内置函数_反射_random_md5_序列化_正则表达式_time
Python2.7 缩进统一: 约定 常量 大写 , 变量 小写 判断一个变量在内存中的地址,也能看出是不是一个值 id()函数 >>> x = 'abc' >>&g ...