ASP.NETMVC请求流程
⼀、应⽤程序启动
1.Application_Start⽅法,程序启动
2.RegisterRoutes⽅法,注册路由
3.System.Web.Mvc.RouteCollectionExtensions.MapRoute⽅法,出现了MvcRoutehandler对象
⼆、请求进⼊
在 “$\Windows\Microsoft.NET\Framework\版本号\fig“ 中可以到 " <add name="UrlRoutingModule-4.0"
type="System.Web.Routing.UrlRoutingModule" />”
证明请求会经过System.Web.Routing.UrlRoutingModule.Init⽅法。
1.System.Web.Routing.UrlRoutingModule.Init⽅法
2.System.Web.Routing.UrlRoutingModule.PostResolveRequestCache⽅法
3.System.Web.Routing.RouteCollection.GetRouteData⽅法
4.System.Web.Routing.Route.GetRouteDara⽅法
这⾥的this.RouteHandler就是在第⼀部分中应⽤程序启动是实例化好的MvcRouteHandler对象。好了,我们现在已经得到了MvcRouteHandler实例,继续向下⾛,先返回第2步:
2.System.Web.Routing.UrlRoutingModule.PostResolveRequestCache⽅法
3. System.Web.Mvc.MvcRouteHandler.GetHttpHandler⽅法,返回MvcHandler对象
4.System.Web.Mvc.MvcHandler的构成⽅法
发现这个类实现了IHttpHandler接⼝,那么不得不去看下ProcessRequest⽅法
5.System.Web.Mvc.MvcHandler.ProcessRequest⽅法
6.System.Web.Mvc.MvcHandler.ProcessRequestInit⽅法
返回到第5步
5.System.Web.Mvc.MvcHandler.ProcessRequest⽅法
6.System.Web.Mvc.ControllerBase.Excete⽅法
7.System.Web.Mvc.Controller.ExcuteCore⽅法
8.System.Web.Mvc.Controller.ActionInvoker属性
9.System.Web.Mvc.Controller.CreateActionInvoker⽅法
返回了实现IActionInvoker接⼝的实例,返回第7步
7.System.Web.Mvc.Controller.ExcuteCore⽅法
8.System.Web.Mvc.ControllerActionInvoker.InvokeAction⽅法
9.System.Web.Mvc.ControllerActionInvoker.InvokeActionResult⽅法
10.System.Web.Mvc.ActionResult类,封装⼀个操作⽅法的结果
我们来看⼀下重写了ExcuteResult的ActionResult的派⽣类:
我们就选ViewResultBase类中的ExcuteResult⽅法看看
11.System.Web.Mvc.ViewResultBase.ExcuteResult⽅法
12.System.Web.Mvc.ViewResult.ExcuteResult⽅法
13.System.Web.Mvc.ViewEngineCollection.FindView⽅法
14.System.Web.Mvc.VirtualPathProviderViewEngine.FindView⽅法
返回第13步
13.System.Web.Mvc.ViewEngineCollection.FindView⽅法
14.System.Web.Mvc.ViewEngineCollection.Find⽅法mvc的controller
15.System.Web.Mvc.ViewEngineCollection.Find⽅法
⾄此,我们得到了ViewEngineResult对象,ViewEngineResult表⽰定位视图引擎的结果。
现在我们返回第11步,继续向下⾛
11.System.Web.Mvc.ViewResultBase.ExcuteResult⽅法
12.System.Web.Mvc.BuildManagerCompiledView.Render⽅法
13. System.Web.Mvc.RazorView.RenderView⽅法,在这⾥使⽤Razor视图引擎来展⽰页⾯

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。