public Router AddRoute(Method Method, string Path, VarMatchAction Handler) { if (!RootRouters.ContainsKey(Method)) { RootRouters[Method] = new Router(); } return(RootRouters[Method].AddRoute($"{URLPrefix}{Path}", Handler)); }
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)); } } }
public Router DELETE(string Path, VarMatchAction Handler) => AddRoute(Method.DELETE, Path, Handler);
public Router PUT(string Path, VarMatchAction Handler) => AddRoute(Method.PUT, Path, Handler);
public Router HEAD(string Path, VarMatchAction Handler) => AddRoute(Method.HEAD, Path, Handler);
public Router AddRoute(string Path, VarMatchAction Handler) => AddRoute(Path.Split('/').Where(s => s.Length > 0), Handler);