private void Server_RequestReceived(object sender, HttpRequestEventArgs e) { WriteLine($"Raw URL: {e.Request.RawUrl}"); WriteLine($"URL: {e.Request.Url}"); WriteLine($"Path: {e.Request.Path}"); string ErrorMessage = ""; string DirectoryName = e.Request.Directory(); string FileName = e.Request.FileName(); string Path = e.Request.Path; string [] splitPath = Path.Split('/'); if (!Directory.Exists(ServerDirectory)) { ErrorMessage = "<H2>Error!! Requested Directory does not exists</H2><Br>"; WriteLine("HTTP folder not found: " + ServerDirectory + DirectoryName); BuildHeader(e, 404, "404 Not Found"); e.Response.OutputStream.WriteString(ErrorMessage); return; } if (e.Request.Path.EndsWith("/")) { // we need to find the default file FileName = DefaultFileName( ); } MemoryStream virtualFileStream = null; DynamicFileRequestedEventArgs fe = new DynamicFileRequestedEventArgs(e); if (DynamicFileRequestedEvent != null) { virtualFileStream = DynamicFileRequestedEvent(this, fe); } if (virtualFileStream != null) { // send virtual file e.Response.ContentType = mimeTypeMappings.TryGetValue( System.IO.Path.GetExtension(fe.FileName), out string mime) ? mime : "application/octet-stream"; e.Response.CacheControl = "no-cache"; virtualFileStream.CopyTo(e.Response.OutputStream); return; } string filePath = DirectoryName == "/" ? System.IO.Path.Combine(ServerDirectory, FileName) : System.IO.Path.Combine(ServerDirectory, DirectoryName, FileName); if (FileName.EndsWith(".py")) { ScriptProcessor.ProcessScriptFile(filePath, e); return; } else { // look for a static file if (File.Exists(filePath)) { try { // set mime type e.Response.ContentType = mimeTypeMappings.TryGetValue( System.IO.Path.GetExtension(FileName), out string mime) ? mime : "application/octet-stream"; if (mime.Contains("image") || mime.Contains("javascript") || mime.Contains("css")) { // allow images, css and javascript to cache e.Response.CacheControl = "max-age=36000"; } else { e.Response.CacheControl = "no-cache"; } Stream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read); fs.CopyTo(e.Response.OutputStream); fs.Close( ); return; } catch { } } else { // return 404 ErrorMessage = "<H2>404 Error! File Does Not Exist...</H2>"; BuildHeader(e, 404, "404 Not Found"); e.Response.OutputStream.WriteString(ErrorMessage); } } }