ASP.NET MVC 路由解析出 RouteData 後,包含目標 Controller 名稱。接著由 MvcRouteHandler 建立 MvcHandler,進而啟動 Controller。
預設路由的 RouteHandler 為 MvcRouteHandler,其 GetHttpHandler 直接回傳 MvcHandler:
public class MvcRouteHandler : IRouteHandler
{
public IHttpHandler GetHttpHandler(RequestContext requestContext)
{
return new MvcHandler(requestContext);
}
}
MvcHandler 實作 IHttpHandler,在 ProcessRequest 中:
RouteData 取得 Controller 名稱ControllerBuilder 取得 IControllerFactoryExecute 方法開始處理public class MvcHandler : IHttpHandler
{
public RequestContext RequestContext { get; private set; }
public MvcHandler(RequestContext requestContext) { this.RequestContext = requestContext; }
public void ProcessRequest(HttpContext context)
{
string controllerName = this.RequestContext.RouteData.Controller;
IControllerFactory controllerFactory = ControllerBuilder.Current.GetControllerFactory();
IController controller = controllerFactory.CreateController(this.RequestContext, controllerName);
controller.Execute(this.RequestContext);
}
}