Inheritance: IHttpRouteData
Exemplo n.º 1
0
        private void ProcessTreeRoute(TreeRouteData treeRouteData)
        {
            if (_MessageHandler != null)
            {
                treeRouteData.MessageHandlers.Add(_MessageHandler);
            }

            foreach (var value in Defaults)
            {
                treeRouteData.Values[value.Key] = value.Value;
            }

            // Parse Parameters from URL and add them to the treeRouteData
            if (UseRegex)
            {
                var result = _MatchPattern.Match(treeRouteData.CurrentSegment);

                for (int i = 1; i < result.Groups.Count; i++)
                {
                    var name  = _MatchPattern.GroupNameFromNumber(i);
                    var value = result.Groups[i].Value;
                    treeRouteData.SetParameter(name, value);
                }
            }


            treeRouteData.AddRouter(this); // Track ApiRouters used to resolve path
        }
Exemplo n.º 2
0
 private IHttpRouteData Dispatch(TreeRouteData treeRouteData)
 {
     if (_HasController)
     {
         treeRouteData.Values["controller"] = _ControllerType.Name.Replace("Controller", "");
         return(treeRouteData);
     }
     else if (treeRouteData.Values.ContainsKey("controller"))
     {
         return(treeRouteData);
     }
     return(null);
 }
Exemplo n.º 3
0
        private IHttpRouteData Find(HttpRequestMessage request, TreeRouteData treeRouteData)
        {
            if (treeRouteData == null)
            {
                treeRouteData = new TreeRouteData(request.RequestUri, _InitalPosition);


                if (SegmentTemplate == string.Empty)
                {
                    if (treeRouteData.AtRoot())
                    {
                        return(Dispatch(treeRouteData)); //Special case root
                    }
                }
                else
                {
                    if (!Matches(request, treeRouteData.CurrentSegment))
                    {
                        return(null);                                                 // URI segment does not match this TreeRoute
                    }
                }
            }



            ProcessTreeRoute(treeRouteData);

            if (treeRouteData.EndOfPath())
            {
                return(Dispatch(treeRouteData));
            }

            treeRouteData.MoveToNext();

            var nextRouter = _childRouters.FirstOrDefault(childRouter => childRouter.Matches(request, treeRouteData.CurrentSegment));

            if (nextRouter != null)
            {
                return(nextRouter.Find(request, treeRouteData));
            }

            return(null);
        }