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