ASP.NET MVC开发专题博客

ASP.NET MVC开发专题博客,为您精选ASP.NET MVC开发教程,助您开发愉快!

公告信息
欢迎光临ASP.NET MVC开发专题博客,祝您开发愉快!
文章档案
最新评论

MVC框架执行过程与URL路由职责-MVC原理系列1

ASP.NET MVC 原理系列开篇


本系列的内容主要来源于ASP.NET MVC2一书,及包括本人的读书笔记及相关见解。

下面让我们开始这个系列,从头开始理解ASP.NET MVC

ASP.NET MVC请求的服务过程

下图是书中的截图,表述了一次通常的ASP.NET MVC请求的服务过程:

image

从图中可以初步看出一个HttpRequest是如何被ASP.NET和ASP.NET MVC框架执行的:经过IIS和ASP.NET处理后,Core Routing会首先根据URL匹配物理路径上的文件,如果不能匹配则由核心路由模块执行路由,路由被匹配后,MvcRouteHandler会将这个请求“带入”MVC框架,执行Controller和Action,Action可以直接注入response,或者更平常的是返回一个ActionResultActionResultExecutedResult方法将被调用,如果是个ViewResult(继承自ActionResult),则会使用WebFormViewEngine转化一个Html,并注入到response。

在以后的系列中,将会对以上过程进行详细分析理解。

  

MVC URL机制包括什么

URL映射不是MVC的机制,但是MVC充分依赖它,并发挥了它的优势。它位于MVC框架前端,是MVC主框架的入口。传统的URL往往对应了服务器磁盘物理路径的文件,而MVC的URL机制打破了这种束缚,使得服务器的文件组织可以不再暴露于众,而是映射到controller和action上。URL机制包括两个主要的工作:

1.URL正向映射(inbound)到Controller和Action

2.Controller和Action反向映射(outbound)并构造URL

 

设置路由

先来回顾一下基本的内容。应用程序初次启动时需要像下面这样注册一个URL:

1routes.MapRoute(null,
2    "{controller}/{action}",
3    new { controller = "CarView", action = "Index" } );

上面代码的MapRoute其实是RouteCollection的一个扩展方法,它有多个重载,先来看看MapRoute最复杂的一个重载版本的源码:

01public static Route MapRoute(this RouteCollection routes, string name, string url, object defaults, object constraints,string[] namespaces) {
02    if (routes == null) {
03        throw new ArgumentNullException("routes");
04    }
05    if (url == null) {
06        throw new ArgumentNullException("url");
07    }
08 
09    Route route = new Route(url, new MvcRouteHandler()) {
10        Defaults = new RouteValueDictionary(defaults),
11        Constraints = new RouteValueDictionary(constraints)
12    };
13 
14    if ((namespaces != null) && (namespaces.Length > 0)) {
15        route.DataTokens = new RouteValueDictionary();
16        route.DataTokens["Namespaces"] = namespaces;
17    }
18 
19    routes.Add(name, route);
20 
21    return route;
22}

从源码可以看出,MapRoute做的事情就是构造一个Route对象,将它加到全局的RouteCollection:RouteTable.Routes中。RouteCollection是RouteBase的集合,Route对象继承自RouteBase。先简单看看Route对象的一些属性:

属性名描述
Url(string)将要被匹配的URL模型,其中用{}定义参数名
RouteHandler(IRouteHandler)当Route匹配的时候,IRouteHandler应当处理request
Defaults(RouteValueDictionary)为参数提供一个默认值表
Constraints(RouteValueDictionary)为参数提供匹配规则表
DataTokens(RouteValueDictionary)为route handler提供一个选择controller的依据,主要用于Areas机制

这些属性将在下面的内容中深入讨论。


本篇开篇MVC框架执行过程与URL路由职责-MVC原理系列1即介绍到此,下面将更精彩。

如果涉及数据库操作,推荐一款配套的ORM框架:CYQ.Data 通用数据层框架
新浪微博粉丝精灵,刷粉丝、刷评论、刷转发、企业商家微博营销必备工具"

2011/9/7 21:17:43 | ASP.NET MVC教程 | |

  • 发表评论