zoukankan      html  css  js  c++  java
  • asp.net mvc的生命周期{转}

    asp.net mvc的生命周期主要分三个阶段
    1、网址路由对比
    2、找到对应的Controller执行相应的Action
    3、执行View并返回结果

    完整的生命周期
    Request->UrlRoutingModule->RouteHandler->MvcHandler->
    DefaultControllerFactory->Controller->View Factory->View->Response

    执行control和view
    当程序执行到MvcHandler,它的入口是ProcessRequest,在MvcHandler中的ProcessRequest

            protected internal virtual void ProcessRequest(HttpContextBase httpContext) {
                SecurityUtil.ProcessInApplicationTrust(() => {
                    IController controller;
                    IControllerFactory factory;
                    ProcessRequestInit(httpContext, out controller, out factory);

                    try {
                        controller.Execute(RequestContext);
                    }
                    finally {
                        factory.ReleaseController(controller);
                    }
                });
            }
    第一步:获取Controller,ControllerFactory

    // 获取控制器的名称
    string controllerName = RequestContext.RouteData.GetRequiredString("controller");

    //获取控制器工厂,默认是DefaultControllerFactory
    factory = ControllerBuilder.GetControllerFactory();

    //创建控制器
    controller = factory.CreateController(RequestContext, controllerName);


    第二步:执行Controller的Action

     controller.Execute(RequestContext);
     最后调用Controller的ExecuteCore方法
            protected override void ExecuteCore() {
                // If code in this method needs to be updated, please also check the BeginExecuteCore() and
                // EndExecuteCore() methods of AsyncController to see if that code also must be updated.

                PossiblyLoadTempData();
                try {
                    string actionName = RouteData.GetRequiredString("action");
                    if (!ActionInvoker.InvokeAction(ControllerContext, actionName)) {
                        HandleUnknownAction(actionName);
                    }
                }
                finally {
                    PossiblySaveTempData();
                }
            }

    第三步:执行View
    如果从Action返回的是ViewResult,Mvc会调用实现IViewEngine对象的FindView方法,然后再调用实现IView(WebFormView)的Render()方法,将
    Html返回给客户端
  • 相关阅读:
    BZOJ2005 能量汇集 【gcd求和】
    莫比乌斯反演
    匈牙利算法 求二分图最大匹配
    HDU3507 print article【斜率优化dp】
    tyvj1305 最大子序和 【单调队列优化dp】
    NOIP2017 列队 题解报告【56行线段树】
    NOIP2017 宝藏 题解报告【状压dp】
    NOIP2017 逛公园 题解报告 【最短路 + 拓扑序 + dp】
    好的软件测试人员简历是什么样子的?
    淘宝网-接口测试白皮书V0.1
  • 原文地址:https://www.cnblogs.com/answercard/p/2652538.html
Copyright © 2011-2022 走看看