コード例 #1
0
        public Router AddRoute(Method Method, string Path, VarMatchAction Handler)
        {
            if (!RootRouters.ContainsKey(Method))
            {
                RootRouters[Method] = new Router();
            }

            return(RootRouters[Method].AddRoute($"{URLPrefix}{Path}", Handler));
        }
コード例 #2
0
        public Router AddRoute(IEnumerable <string> PathToks, VarMatchAction Handler)
        {
            if (PathToks.Count() == 0)
            {
                if (IsTerminal)
                {
                    throw new ArgumentException($"Duplicate handler for path: {Path}");
                }
                else
                {
                    this.Handler = Handler;

                    return(this);
                }
            }
            else
            {
                var next      = PathToks.First();
                var remaining = PathToks.Skip(1);

                if (next.StartsWith("$"))
                {
                    if (!VarChildren.ContainsKey(next))
                    {
                        var varkey = next.TrimStart('$');

                        if (HaveVarKey(varkey))
                        {
                            throw new ArgumentException($"Duplicate var key detected: {varkey}");
                        }

                        if (Path == "/")
                        {
                            VarChildren[next] = new Router($"/{next}", varkey, this);
                        }
                        else
                        {
                            VarChildren[next] = new Router($"{Path}/{next}", varkey, this);
                        }
                    }

                    return(VarChildren[next].AddRoute(remaining, Handler));
                }
                else
                {
                    if (!Children.ContainsKey(next))
                    {
                        if (Path == "/")
                        {
                            Children[next] = new Router($"/{next}", next, this);
                        }
                        else
                        {
                            Children[next] = new Router($"{Path}/{next}", next, this);
                        }
                    }

                    return(Children[next].AddRoute(remaining, Handler));
                }
            }
        }
コード例 #3
0
 public Router DELETE(string Path, VarMatchAction Handler) => AddRoute(Method.DELETE, Path, Handler);
コード例 #4
0
 public Router PUT(string Path, VarMatchAction Handler) => AddRoute(Method.PUT, Path, Handler);
コード例 #5
0
 public Router HEAD(string Path, VarMatchAction Handler) => AddRoute(Method.HEAD, Path, Handler);
コード例 #6
0
 public Router AddRoute(string Path, VarMatchAction Handler) => AddRoute(Path.Split('/').Where(s => s.Length > 0), Handler);