前言:最近一段时间在学习MVC源码,说实话,研读源码真是一个痛苦的过程,好多晦涩的语法搞得人晕晕乎乎。这两天算是理解了一小部分,这里先记录下来,也给需要的园友一个参考,奈何博主技术有限,如有理解不妥之处,还希望大家斧正,博主感激不尽!
本文原创地址:http://www.cnblogs.com/landeanfen/p/5989092.html
一、MVC原理解析
最近园子里Asp.Net Core火了一阵,不管微软的开源动作有多么迟缓,还是希望微软能够给力一次。作为Core的主要Web框架——MVC,虽然已经开源,但是读起来着实费劲,并且感觉很多核心部件都找不到。于是只能通过Reflector去反编译MVC5的组件以及参考博客园Fish Li等大神的文章去学习下MVC5的原理。
10月26日更新:感谢园友Adming在评论中提醒,原来Asp.net Core Mvc和Asp.net Mvc 5的原理已经完全不同,难怪在Core Mvc的源码里面已经找不到MvcHandler、UrlRoutingModule等核心部件了呢,此系列文章就先学习下MVC5的原理,等以后有空了再来研究Core MVC吧。
Asp.Net Core MVC的开源地址:https://github.com/aspnet/Mvc
Asp.net MVC的开源地址:http://aspnetwebstack.codeplex.com/SourceControl/latest
1、MVC原理
之前的文章有介绍MVC的路由机制,其实路由机制算是MVC的原理的核心之一。在此我们还是要不厌其烦再来谈谈整个过程,因为这是理解MVC原理不可逾越的鸿沟。当我们收到一个URL的请求时,服务端收到请求,主要经历以下几个步骤:
- 请求被UrlRoutingModule部件拦截
- 封装请求上下文HttpContext,成为HttpContextWrapper对象。
- 根据当前的HttpContext,从Routes集合中得到与当前请求URL相符合的RouteData对象。
- 将RouteData与<
