protected virtual HttpResponse RouteHttpRequest(HttpRequest request) { HandleParamsBasedRequest(request); if (string.Empty.Equals(request.Url) || "/".Equals(request.Url) || request == null || string.IsNullOrEmpty(request.Url)) { return(HttpBuilder.Ok()); } List <HttpRoute> routes = this.Routes.Where(x => Regex.Match(request.Url, x.UrlRegex).Success).ToList(); if (!routes.Any()) { return(HttpBuilder.NotFound()); } HttpRoute route = routes.SingleOrDefault(x => x.Method == request.Method); if (route == null) { return(new HttpResponse() { HttpResponseStatus = HttpStatus.MethodNotAllowed }); } var match = Regex.Match(request.Url, route.UrlRegex); if (match.Groups.Count > 1) { request.Path = match.Groups[1].Value; } else { request.Path = request.Url; } request.Route = route; try { return(route.Callable(request)); } catch (Exception ex) { Console.WriteLine("Error -> " + ex.Message); return(HttpBuilder.InternalServerError()); } }
public void AddRoute(HttpRoute route) { this.Routes.Add(route); }
private static void BuildRoutesFromServices() { try { var type = typeof(IController); var types = AppDomain.CurrentDomain.GetAssemblies() .SelectMany(s => s.GetTypes()) .Where(p => type.IsAssignableFrom(p)); foreach (var t in types) { if (t != null) { Type serviceType = GetTypeFromAssemblies(t.FullName); if (!serviceType.IsInterface && !serviceType.IsAbstract) { IController service = (IController)Activator.CreateInstance(serviceType); if (service != null) { var r = service.GetType().GetCustomAttribute <HttpResource>(); service.DynamoService = DynamoService; foreach (MethodInfo method in service.GetType().GetMethods()) { var paths = method.GetCustomAttributes <HttpPath>(); foreach (HttpPath m in paths) { HttpRoute route = new HttpRoute(); route.Callable = (HttpRequest request) => { object response = null; List <object> args = GetParamsFromRequest(method, request); if (args != null) { response = method.Invoke(service, args.ToArray()); } return((HttpResponse)response); }; route.Name = method.Name; route.UrlRegex = string.Format(Consts.REGEX_PATH, r.ResourceName + m.Path); route.Method = m.Method.ToString(); Processor.AddRoute(route); } } } } } } } catch (Exception e) { Console.WriteLine(e.Message); } }