你的位置:首页 > 软件开发 > ASP.net > [ASP.NET]分析MVC5源码,并实现一个ASP.MVC

[ASP.NET]分析MVC5源码,并实现一个ASP.MVC

发布时间:2015-09-23 11:00:08
本节内容不是MVC入门教程,主要讲MVC原理,实现一个和ASP.NET MVC类似基本原理的项目. MVC原理是依赖于ASP.NET管道事件基础之上的.对于这块,可阅读上节内容[ASP.NET]谈谈IIS与ASP.NET管道 本节目录:MVC简介MVC5源码实 ...

本节内容不是MVC入门教程,主要讲MVC原理,实现一个和get='_blank'>ASP.NET MVC类似基本原理的项目.

 

MVC原理是依赖于ASP.NET管道事件基础之上的.对于这块,可阅读上节内容

[ASP.NET]谈谈IIS与ASP.NET管道

 

 

 

本节目录:

  • MVC简介
  • MVC5源码
  • 实现一个MVC

 

MVC简介

随着技术的发展,现在已经将MVC模式等同于三层模式。

如果要严格区分的话,UI层指View和Controller,BLL,DAL层和模型层都属于Model中。

 

在建立MVC项目的时候,选择空的项目,会建立一个如下的项目结构

[ASP.NET]分析MVC5源码,并实现一个ASP.MVC

 

由于MVC具有以下优点

  1. 性能高,不需要经过复杂的控件生命周期
  2. SEO,页面干净,没有ViewState,url地址没后缀名
  3. 扩展多,ActionResult各种子类,轻松返回JSON,string
  4. Razor视图引擎
  5. ....

所以MVC不得不成为ASP.NET的首选开发

 

扩展

Action的本质就是方法,只要是public的方法,外部都能访问到

 

 

 

 

 

MVC原理

路由系统

类图

[ASP.NET]分析MVC5源码,并实现一个ASP.MVC

 

代码图

路由对象

[ASP.NET]分析MVC5源码,并实现一个ASP.MVC

路由系统

[ASP.NET]分析MVC5源码,并实现一个ASP.MVC

 

 

RouteTable

路由表,有个RouteDictionary属性,存放RouteBase的实现类Route。通过Route能返回RouteData.

RouteData中包括

 

 

路由系统原理

首先添加一条路由对象,路由对象相当于定制一个url模板

然后创建一个Controller工厂,用来反射调用Controller方法,并缓存所有Controller Type,将其赋值给ControllerBuilder,这个是一个单例对象.

 

UrlRoutingModule

注册第7个事件,并且根据HttpContext(实际就是读取URL),从RouteTable中获取到RouteData,

然后通过RouteData获取IHttpHandler

 

扩展: 

路由系统依赖UrlRoutingModule,而这个在默认配置的Web.config中已经配置,所以路由并不是ASP.Net MVC专属,而是Asp.Net必经之路.

[ASP.NET]分析MVC5源码,并实现一个ASP.MVC

 

 

 

ActionResult

我们的Action实际上就是返回一个ActionResult.

实际上ActionResult是HttpHandle中PR方法最终输出也是最核心的方法.

这里看下ActionResult源码和JsonResult源码

 public abstract class ActionResult {  public abstract void ExecuteResult(ControllerContext context); }

原标题:[ASP.NET]分析MVC5源码,并实现一个ASP.MVC

关键词:ASP.NET

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。