/// <summary> /// Evaluates the Routing tree and return at least one route. /// </summary> /// <param name="resourcePath"> /// HTTP path to the requested resource. /// </param> /// <returns> /// Returns a route to execute. /// </returns> public RouteEvaluation Evaluate(BlackContext context) { if (this.RootRoute == null) { throw new BlackException("Router requires at least a root route", null); } if (context == null) { throw new ArgumentNullException("context"); } RouteWalker walker = new RouteWalker(); walker.router = this; walker.ResourcePath = context.ResourcePath; walker.Context = context; var finalRoute = walker.Walk(); if (finalRoute.Route != null) { return(finalRoute); } return(new RouteEvaluation { Route = NotFoundRoute }); }
internal void ProcessRequest(BlackRequest request) { ensureInitialized(); BlackContext context = new BlackContext(this,request.Uri); context.Request = request; try { Routing.RouteEvaluation evalResult = null; //All evaluation and Pre-Execution(on dynamic routing discovery) exceptions will be popped up to root error routing(if present) or BlackLinkx default. evalResult = this.Routes.Evaluate(context); if(evalResult.Route == null) { Console.Error.WriteLine("Route evaluation returned nothing to show"); } else { Console.Error.WriteLine("Route evaluation returned {0} as Controller and Action {1}",evalResult.Route.ControllerType.FullName,evalResult.Route.ActionName); } if(evalResult == null) evalResult = new Routing.RouteEvaluation(); if(evalResult.Route != null) { try { var action = evalResult.InstantiatedAction != null ? evalResult.InstantiatedAction : context.ActivateAction(evalResult.Route); Console.Error.WriteLine("Executing Action"); action.Execute(ActionExecuteType.Complete); Console.Error.WriteLine("Action next phase is: {0}",action.NextPhase); } catch(Exception ex) { context.LastError = ex; executeErrorAction(evalResult.Route,context); } } }catch(Exception ex) { context.LastError = ex; if(this.Routes.RootRoute.ErrorRoute == null) { context.writeDefaultErrorPage(); return; } else { executeErrorAction(this.Routes.RootRoute,context); } } }
/// <summary> /// Executes the error route or it's parent. This function does not catch any exception. /// </summary> /// <param name="route"> /// A <see cref="Routing.Route"/> /// </param> void executeErrorAction(Routing.Route route, BlackContext context) { Route currentRoute = route; up_route: Route errorRoute = currentRoute.ErrorRoute; if (errorRoute == null && currentRoute.Parent != null) { currentRoute = currentRoute.Parent; goto up_route; } if (errorRoute == null) { context.writeDefaultErrorPage (); } else { var errorAction = context.ActivateAction (errorRoute); errorAction.Execute (ActionExecuteType.Complete); } }
/// <summary> /// Evaluates the Routing tree and return at least one route. /// </summary> /// <param name="resourcePath"> /// HTTP path to the requested resource. /// </param> /// <returns> /// Returns a route to execute. /// </returns> public RouteEvaluation Evaluate(BlackContext context) { if(this.RootRoute == null) throw new BlackException("Router requires at least a root route",null); if(context == null) throw new ArgumentNullException("context"); RouteWalker walker = new RouteWalker(); walker.router = this; walker.ResourcePath = context.ResourcePath; walker.Context = context; var finalRoute = walker.Walk(); if(finalRoute.Route != null) { return finalRoute; } return new RouteEvaluation { Route = NotFoundRoute }; }
public ProdutosController(BlackContext context) { _context = context; }
public UsuariosController(BlackContext context) { _context = context; }
public PedidosController(BlackContext context) { _context = context; }