zoukankan      html  css  js  c++  java
  • asp.net mvc生命周期学习

    ASP.NET MVC是一个扩展性非常强的框架,探究其生命周期对用Mock框架来模拟某些东西,达到单元测试效果,和开发扩展我们的程序是很好的。

    生命周期1:创建routetable.把URL映射到handler(应用程序第一次启动发生);

    2:urlroutingmodule拦截请求,当我们发起请求时发生,它拦截请求并且创建和执行合适的handler;

    3:执行MVCHandler,mvchandler创建控制器,并且把控制器传入controllercontext,然后执行控制器;

    4:执行控制器,控制器检测要执行的控制器方法,构建参数列表并且执行方法;

    5:调用RenderView方法,大多数情况下,控制器方法调用RenderView()来把内容呈现回浏览器。Controller.RenderView()方法把这个工作委托给某个ViewEngine来做。

    当我们访问一个MVC网站时候

    1. Request 请求到来
    2. IIS 根据请求特征将处理权移交给 ASP.NET
    3. UrlRoutingModule将当前请求在 Route Table中进行匹配
    4. UrlRoutingModuleRouteCollection中查找Request匹配的RouteHandler,默认是MvcRouteHandler MvcRouteHandler 创建 MvcHandler实例.(路由)
    5.  MvcHandler执行 ProcessRequest.
    6.  MvcHandler 使用 IControllerFactory 获得实现了IController接口的实例,找到对应的HomeController
    7.  根据Request触发HomeControllerIndex方法
    8. Index将执行结果存放在ViewData
    9. HomeControllerIndex方法返回 ActionResult
    10. Views/Home/Index.cshtml ViewData呈现在页面上
    11. Index.cshtml执行ProcessRequest方法
    12. Index.cshtml执行Render方法 输出到客户端

    两个核心流程:

    一、

    当一个URL请求到来时,被UrlRoutingModule拦截,拦截后执行流程如下:封装当前http上下文,变为HttpContextWrapper对象。

    根据当前的http上下文,从Routes中得到与当前请求URL相符合的RouteData对象。该对象存储有RouteHandler信息。

    把RouteData与http上下文请求封装成一个RequestContext对象。

    根据RequestContext对象,从RouteData的RouteHandler中获取IHttpHandler。

    执行IHttpHandler,进行请求的真正处理

    网站开始时要对路由进行注册

    RouteTable.Routes.Add("default", 
          new Route{Url="{controller}/{action}"});

    二、

    程序通过上面的URL路由转换后,进入HttpHandle中,经过以下步骤实现对Controller的激活:

    从Requestcontext封装的RouteData中得到Controller名字。

    通过ControllerBuilder得到当前默认的Controller工厂。

    根据Controller的名字,创建控制器对象(在ControllerFactory初始化的时候,会扫描整个程序集中所有实现IController接口的控制器类型,所以当调用CreateController时,实际上是直接获取)。

    最后执行控制器。执行的实质其实就是执行ActionInvoker.InvokeAction,即根据请求上下文执行相应的Action。

    同样MVC初始化时也要注册一些控制器信息

    ControllerBuilder.Current.SetControllerFactory(new DefaultControllerFactory());
  • 相关阅读:
    iOS 的 XMPPFramework 简介
    Swift闭包
    Objective-C类成员变量深度剖析
    iOS Auto Layout
    iOS WIFI
    AppStore提审攻略
    iOS7 修改导航系统默认返回按钮文字及颜色
    iOS Block浅析
    Latency
    Charles抓包工具的使用
  • 原文地址:https://www.cnblogs.com/zoujking/p/3315901.html
Copyright © 2011-2022 走看看