首页 / 网页编程 / ASP.NET / 深入分析ASP.NET Mvc 1.0 – 1. 深入MvcHandler
        
            深入分析ASP.NET Mvc 1.0 – 1. 深入MvcHandler2011-03-26 博客园 Terry SunMvcHandler是一个mvc程序真正开始的地方,因为你可以直接看到并调试它的源码。MvcHandler的主要代码如下:protected internal virtual void ProcessRequest(HttpContextBase  httpContext) {
       AddVersionHeader(httpContext);
       // Get the controller type
       string controllerName =  RequestContext.RouteData.GetRequiredString("controller");
       // Instantiate the controller and call Execute
       IControllerFactory factory =  ControllerBuilder.GetControllerFactory();
       IController controller = factory.CreateController (RequestContext, controllerName);
       if (controller == null) {
         throw new InvalidOperationException(
           String.Format(
             CultureInfo.CurrentUICulture,
             MvcResources.ControllerBuilder_FactoryReturnedNull,
             factory.GetType(),
             controllerName));
       }
       try {
         controller.Execute(RequestContext);
       }
       finally {
         factory.ReleaseController(controller);
       }
     }这个方法的流程可以概括为: 找到Requst中的Controller name, 根据Controller name创建这个Controller, 执行这个Controller中执行被请求的Action。具体分析如下:1. 添加Http HeaderAddVersionHeader(httpContext);添加一个Http Header: HTTP/1.1 200 OK   …   X-AspNetMvc-Version: 1.0…2. 从路由表中找到请求的controller的名子string controllerName =  RequestContext.RouteData.GetRequiredString("controller");获取路由表中的controller name, 在下面的代码中根据这个controller name在缓存 中查找到对应的controller类型并生成controller类。3. 返回一个IControllerFactory对象IControllerFactory factory =  ControllerBuilder.GetControllerFactory();返回一个继承自IControllerFactory接口的类的实例,这里默认返回 DefaultControllerFactory类。 ControllerBuilder属性是ControllerBuilder类的一个 静态实例,在mvc程序第一次启动时才会执行 ControllerBuilder类的默认构造函数,在 这个构造函数将DefaultControllerFactory类的一个实例传入到SetControllerFactory() 方法中,这样做的目地是定义GetControllerFactory()的具体返回类型。 ControllerBuilder类的构造函数代码如下:public ControllerBuilder() {
       SetControllerFactory(new DefaultControllerFactory() {
         ControllerBuilder = this
       });
     }