上篇讲到 请求到达 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: }