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返回给客户端
  • 相关阅读:
    C# 图解教程 第一章 C#和.NET框架
    How I explained OOD to my wife(转)
    ListView 无 DataSource 依然用 DataPager 翻页
    【树莓派】crontab的两个问题
    【CentOS 7】scp示例
    【CentOS 7】nginx配置web服务器
    【CentOS_7】安装nginx
    【python 2.7】获取外部参数
    【python 2.7】输入任意字母数字,输出其对应的莫尔斯码并播放声音
    【python 2.7】python读取json数据存入MySQL
  • 原文地址:https://www.cnblogs.com/answercard/p/2652538.html
Copyright © 2011-2022 走看看