• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ASP.NETMVC从请求到响应发生了什么

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

*过程描述

当浏览器发出一个http请求后,该请求被UrlRoutingModule截获,UrlRoutingModule根据请求上下文去系统路由表(RouteTable)中匹配,从中获取一个RouteData,包含了请求的路由信息,特别是包含一个RouteHandler属性,因为在global的Application_Start方法中我们注册了mvc的路由规则,所以该RouteHandler属性的类型是MvcRouteHandler(实现了IRouteHandler)。UrlRoutingModule根据RouteData的RouteHandler属性又可以得到一个HttpHandler,该HttpHandler的类型是MvcHttpHandler(因为RouteHandler的类型是MvcRouteHandler),并由MvcHttpHandler来具体处理请求的一些逻辑。

MvcHttpHandler类实现了IHttpHandler,其核心方法是ProcessRequest,它也是IHttpHandler接口中唯一要实现的方法,该方法被用来处理请求。

在处理请求时,MvcHttpHandler会根据请求信息生成相应Controller的实例(所有Controller类最终会继承一个IController接口,该接口中包含一个Execute方法,用来执行指定的请求上下文),该Controller的实例会根据请求信息调用指定的acton。在执行action的过程中又经历了请求参数的模型绑定,操作过滤器的请求拦截处理和操作逻辑的执行。

Controller中Action返回给客户端的都是ActionResult类型,ActionResult是一个抽象类,其实现主要包含两类:ViewResult类和非ViewResult类(如JsonResult、ContentResult、FileResult等)。如果Action返回的是非ViewResult,则内容将直接被输送到Response响应流中,显示给客户端,而如果返回的是ViewResult,则视图引擎会找到需要被渲染的视图,视图被加载成WebViewPage<TModel>类型,并渲染生成Html,最终返回Html。

 

*细节补充

1.UrlRoutingModule中的方法为什么会在请求中被调用

一个请求进入ASP.NET请求处理管道时,会经历19个阶段,即19个事件,其中的PostResolveRequestCache事件被UrlRoutingModule中的方法注册,这样自然在经历PostResolveRequestCache事件时,会去调用UrlRoutingModule中的方法。其中UrlRoutingModule对象是ASP.NET根据在全局webconfig(C\Windows\Microsoft.NET\Framework\版本号\Config\Web.config)中的配置预先加载的。

UrlRoutingModule继承了IHttpModule接口,该接口中的init方法被用来向上述19个事件中注册事件处理程序。ASP.NET也是因为IHttpModule,可以实现拓展。

 

2.路由表中的路由规则是何时被注册的,RouteData中RouteHandler属性的类型为什么是MvcRouteHandler?

 路由表中的路由规则是在global中的Application_Start方法中被注册的,此处注册的方法是RouteConfig.RegisterRoutes(RouteTable.Routes),该方法内部调用了RouteCollection对象的MapRoute方法,而该方法内部其实已经定义了当前路由的RouteHandler为MvcRouteHandler。

 

 *完整的请求处理图

 

*参考文章

1.http://www.cnblogs.com/canfengfeixue/p/8035311.html

2.https://www.cnblogs.com/ensleep/p/5458270.html

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap