上篇讲到 请求到达 MvcRouteHandler ,并且透过 IRouteHandler.GetHttpHandler 获取到了真正的处理程序 MvcHandler

这次我们看看,MvcHandler是如何依据请求,来激活对应的controller和Action来处理请求的。

 

一、先看看MvcHandler 的核心内容

class MvcHandler : IHttpAsyncHandler, IHttpHandler, IRequiresSessionState
   2: {
void ProcessRequest(HttpContext httpContext)
   4:     {
//使用HttpContextWrapper对HttpContext进行封装,封装的目的是为了解耦以获得可测试性.然后从RequestContext.RouteData中提取Controller名称.
new HttpContextWrapper(httpContext);
this.ProcessRequest(httpContext2);
   8:     }
   9:     
void ProcessRequest(HttpContextBase httpContext)
  11:     {
  12:         IController controller;
  13:         IControllerFactory controllerFactory;
//获取到Controler和ControllerFactory实例,并赋值给局部变量
try
  16:         {
//Action的调用,下一篇介绍
//当前Controler对象的Action的创建与执行(执行包括:加载TempData, 创建及执行Action,处理Action返回的ActionResult ,保存TempData数据)
this.RequestContext);
  20:                 
  21:         }
finally
  23:         {
//释放当前Controler对象
  25:             controllerFactory.ReleaseController(controller); 
  26:         }
  27:     }
  28: }

相关文章: