Exemplo n.º 1
0
 //TODO: handlers shouldn't really be objects
 //TODO: tons of shared code between these methods
 public void AddRoute(string method, string path, IHandler handler)
 {
     var pathList = path.Split('/').Where(s => !String.IsNullOrEmpty(s)).Select(s => s.ToLowerInvariant());
     method = method.ToUpperInvariant();
     
     if (!_routeTrees.ContainsKey(method))
     {
         //add root route for method
         _routeTrees[method] = new RoutingNode(method);
     }
     
     var root = _routeTrees[method];
     root.AddNodeForPath(pathList.ToArray(), 0, path, handler);
     
 }
Exemplo n.º 2
0
 internal void AddNodeForPath(string[] pathParts, int index, string path, IHandler handler)
 {
     if (pathParts.Length == index)
     {
         if(Handler == null)
         {
             Handler = handler;
             SetTokenPositionsAndNames(pathParts);
         }
         else
         {
             throw new DuplicateRouteRegistrationException(path);
         }
     }
     else
     {
                         
         var nextPart = pathParts[index];
         if (nextPart.StartsWith("{") && nextPart.EndsWith("}")) //next part is token
         {
             if (null == _tokenNode)
             {
                 _tokenNode = new RoutingNode(nextPart.Substring(1, nextPart.Length - 2));
             }
             
             _tokenNode.AddNodeForPath(pathParts, index + 1, path, handler);
         }
         else
         {
             if (!_namedChildNodes.ContainsKey(nextPart))
             {
                 _namedChildNodes[nextPart] = new RoutingNode(nextPart);
             }
             _namedChildNodes[nextPart].AddNodeForPath(pathParts, index + 1, path, handler);
         }
     }
     
 }