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返回给客户端

  • 相关阅读:
    VMware虚拟机Mac OS X无法调整扩展硬盘大小,更新xcode时出现磁盘空间不足
    打包时Xcode报:此证书的签发者无效Missing iOS Distribution signing identity
    iPhone私有API
    Xcode真机调试中"There was an internal API error"错误解决方法
    用C#通过反射实现动态调用WebService 告别Web引用
    MySQL、PostgreSQL、Ingres r3、MaxDB等开源数据库的详细比较
    jQuery Mobile 移动开发中的日期插件Mobiscroll使用说明
    SQL Server 2008|2012 阻止保存要求重新创建表的更改
    SQL Server如何启用xp_cmdshell组件
    Windows平台下利用APM来做负载均衡方案
  • 原文地址:https://www.cnblogs.com/50614090/p/2350918.html
Copyright © 2011-2022 走看看