コード例 #1
0
ファイル: Route.cs プロジェクト: oblivious/Oblivious
        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
                       };
        }
コード例 #2
0
ファイル: MvcServer.cs プロジェクト: oblivious/Oblivious
        /// <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;

        }
コード例 #3
0
ファイル: RoutingService.cs プロジェクト: oblivious/Oblivious
        public RouteResult Route(RoutingContext routingContext)
        {
            foreach (Route route in _routes)
            {
                RouteResult result = route.RouteRequest(routingContext);
                if (result != null)
                    return result;
            }

            return null;
        }