MVC中擴展点的应用.doc

  1. 1、本文档共27页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
MVC中擴展点的应用

ASP.Net MVC中扩展点的应用 之所以说MVC框架很灵活,在于其扩展性很强,几乎在请求处理管道的任何一个节点都可以扩展。本系列文章将会对扩展点进行总结整理,以此增强对MVC框架的了解。 ??? (一)路由系统 MVC是建立在路由系统之上的,所以严格上讲,路由系统并不属于MVC框架,路由系统是.NET Framework 3.5 SP1新增的内容,位于System.Web.Routing命名空间。 ??? 下面为ASP.NET MVC请求处理管道示意图(注:来源于Steven Sanderson所著《Pro ASP.NET MVC Framework》一书): ??? 当IIS接收到一个请求后,将按以下步骤进行处理: 1、IIS根据文件类型将请求转交给相应的处理程序,如果属于ASP.NET文件,则将请求转发给aspnet_isapi.dll。(注:在II6和IIS7上的处理方式是有区别的) 2、 HTTP处理模块UrlRoutingModule接收到请求后,循环调用其RouteCollection集合中的RouteBase对象,找出匹配的RouteBase。 3、根据匹配的RouteBase对象返回的RoueData对象,获取RouteHandler。 4、RouteHandler返回一个HTTP处理程序(IHttpHandler),最终通过此处理程序处理请求,生成应答内容。 5.、如果RouteHandler为MvcRouteHandler,并且其返回的HTTP处理程序为MvcHandler,则进入到MVC框架,MvcHandler对象负责调用适当的控制器和活动方法,生成应答内容。 ??? 从上面步骤中可以看出,只有到第五个步骤后才真正进入到MVC框架,在此之前都是在ASP.NET的路由系统中。下面介绍这些步骤中涉及到的类型: 1、UrlRoutingModule类 ??? 此类事路由系统的核心类,其主要功能是根据请求上下文找出合适的RouteBase对象。属性RouteCollection是一个RouteBase对象集合,UrlRoutingModule接收到请求后,循环RouteCollection集合中的RouteBase对象,调用其GetRouteData方法,如果该方法返回的RouteData对象不为null,则终止循环,将RouteData对象存入RequestContext。然后根据RouteData的RouteHandler获取合适的IHttpHandler处理程序。 ??? UrlRoutingModule实际上是一个ASP.NET的HTTP 处理模块,所以它通过配置文件的httpMoudles配置节点来添加的。 2、RouteTable类 ??? 用于存储应用程序的路由集合,静态属性Routes返回应用程序的路由集合,它实际等同于UrlRoutingModule的RouteCollection属性。通过RouteTable.Routes.Add方法可以添加自定义的RouteBase对象。 3、RouteBase类 ??? 表示一个ASP.NET路由的基类,所有的路由都应该继承自此类。 ??? GetRouteData方法检查传入的HttpContextBase信息是否符合路由规则,符合则返回一个RouteData对象,不符合则返回null,此方法由UrlRoutingModule类在循环RouteTable.Routes集合时调用。 ??? GetVirtualPath方法根据路由数据生成相应的Url。 4、Route类 ??? 是RouteBase的一个实现,主要添加了几个属性: ??? Constraints: 对URL的约束条件 ??? DataTokens:传递到路由处理程序的自定义值 ??? Defaults:Url不包含指定参数时得默认值 ??? RouteHandler:一个路由处理程序(IRouteHandler) 5、IRouteHandler接口 ??? 路由处理程序接口,包含一个GetHttpHandler方法,用于返回一个IHttpHandler处理程序对象。 6、MvcRouteHandler类 ??? Mvc框架实现的一个路由处理程序,其GetHttpHandler方法返回一个MvcHandler对象 7、MvcHandler ??? 由MvcRouteHandler返回,根据请求信息,调用合适的控制器和方法,生成应答内容。 8、StopRoutingHandler类 ??? 表示一个“不处理URL的路由处理类”? 比如MVC在RouteCollection类型上扩展了一个IgnoreRoute方法,用于指示路由系统忽略处理指定的url。其实现方式是生成一个R

文档评论(0)

fv45ffsjjI + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档