public HttpResponse Handle(HttpRequest request) { var path = Path.Combine(_baseDirectory, request.Url.TrimStart('/')); var fileInfo = new FileInfo(path); if (!fileInfo.FullName.StartsWith(_baseDirectory)) { return new HttpResponse(HttpStatusCode.Forbidden); } if (File.Exists(path)) { var response = new HttpResponse(HttpStatusCode.OK, File.ReadAllBytes(path)); var fileExtension = Path.GetExtension(path); if (_mimeTypes.ContainsKey(fileExtension)) { response.AddHeader("Content-Type", _mimeTypes[fileExtension]); } return response; } if (_next != null) { return _next.Handle(request); } return new HttpResponse(HttpStatusCode.NotFound); }
public HttpResponse Handle(HttpRequest request) { var routeParts = request.Url.Split('/').Where(x => !string.IsNullOrWhiteSpace(x)).ToList(); if (!routeParts.Any()) return new HttpResponse(HttpStatusCode.NotFound); var controllerName = $"{routeParts[0]}Controller"; var controllerType = _controllerAssembly .GetTypes() .FirstOrDefault(x => x.Name.Equals(controllerName, StringComparison.InvariantCultureIgnoreCase)); var controllerMethod = controllerType? .GetMethods() .FirstOrDefault(x => request.Method.Equals(x.Name, StringComparison.InvariantCultureIgnoreCase)); if (controllerType == null || controllerMethod == null) { return new HttpResponse(HttpStatusCode.NotFound); } var controllerInstance = Activator.CreateInstance(controllerType); return (HttpResponse)controllerMethod.Invoke(controllerInstance, null); }