链接地址 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.

最新文章

  1. C#注解属性的感想一:
  2. 127.0.0.1\SQLEXPRESS连接异常
  3. day04-java-循环结构(while、do-while、for)
  4. [JFinal 1] JFinal和SSH中使用拦截器的对比
  5. LA 4329
  6. TengineWeb服务器项目
  7. [BZOJ 1016] [JSOI2008] 最小生成树计数 【DFS】
  8. javascript 【封装AJAX】
  9. bootstarp基本模板
  10. 拦截所有AJAX调用,重点处理服务器异常
  11. jquery判断节点是否存在
  12. ExtJS与后台Java交互
  13. IE8兼容border-radius.
  14. map的循环删除操作
  15. 一个java使用redis的简单案例
  16. .NET 黑魔法 - asp.net core 身份认证 - Policy
  17. nodejs设置NODE_ENV环境变量(2)
  18. 变分推断(Variational Inference)
  19. 使用array_merge重新排列数组下标
  20. CodeForces - 725D Contest Balloons 贪心

热门文章

  1. 软件工程(GZSD2015)第二次作业成绩
  2. 个人作业3——个人总结(Alpha阶段)
  3. 201521123002《Java程序设计》第7周学习总结
  4. 201521123005 《java程序设计》 第六周学习总结
  5. 让你的python程序同时兼容python2和python3
  6. 201521123109 《java程序设计》第11周学习总结
  7. 201521123008《Java程序设计》第10周学习总结
  8. Activiti第三篇【连接、排他网关、指定任务处理人、组任务】
  9. CSDN博客新手使用方案
  10. CDS测试框架介绍:如何为ABAP CDS Entities写测试