public RouteResult RouteRequest(RoutingContext context) { // Uri adds one segment extra (counts slashes) var requestUriSegments = context.Request.Uri.Segments.Length - 1; if (!context.Request.Uri.AbsolutePath.StartsWith(ControllerUri)) return null; if (requestUriSegments < UriSegments) return null; string actionUri = ControllerUri; string actionName; MethodInfo method; // using default action if (requestUriSegments == UriSegments) { if (_defaultMethod == null) return null; method = _defaultMethod; actionName = _defaultMethod.Name; } else { actionName = context.Request.Uri.Segments[UriSegments + 1].TrimEnd('/'); method = GetMethod(context.Request.Method, actionName); if (method == null) return null; } return new RouteResult { ControllerType = ControllerType, Action = method, ActionName = actionName, ControllerUri = ControllerUri }; }
/// <summary> /// Process a request. /// </summary> /// <param name="context">Request information</param> /// <returns>What to do next.</returns> public ProcessingResult Process(RequestContext context) { _current = this; var routingContext = new RoutingContext(context.Request); var routeResult = RoutingService.Route(routingContext); if (routeResult == null) return ProcessingResult.Continue; var controllerContext = new ControllerContext(context) {ActionName = routeResult.ActionName, ControllerUri = routeResult.ControllerUri}; var result = _factory.Invoke(routeResult.ControllerType, routeResult.Action, controllerContext); var viewData = result as IViewData; if (viewData != null) { _logger.Trace("Rendering action " + controllerContext.ActionName); RenderView(controllerContext, viewData); } else { var action = result as IActionResult; if (action != null) { ProcessingResult processingResult = _actionProvider.Invoke(context, action); if (processingResult == ProcessingResult.Abort) return processingResult; } } return ProcessingResult.SendResponse; }
public RouteResult Route(RoutingContext routingContext) { foreach (Route route in _routes) { RouteResult result = route.RouteRequest(routingContext); if (result != null) return result; } return null; }