<%@ WebHandler Language="C#" Class="GetItems" %> using System; using System.Web; using System.IO; using System.Collections.Generic; using System.Linq; using System.Text; using System.Web.Script.Serialization; public class GetItems : IHttpHandler { public void ProcessRequest(HttpContext context) { context.Response.Clear(); context.Response.ContentType = "application/json"; context.Response.ContentEncoding = Encoding.UTF8; context.Response.TrySkipIisCustomErrors = true; try { List fileList = GetFileList("/", "*"); JavaScriptSerializer serializer = new JavaScriptSerializer { MaxJsonLength = int.MaxValue }; context.Response.StatusCode = 200; context.Response.Write(serializer.Serialize(fileList)); } catch (Exception ex) { context.Response.StatusCode = 500; JavaScriptSerializer serializer = new JavaScriptSerializer(); context.Response.Write(serializer.Serialize(new { error = "Unable to retrieve the file list.", details = ex.Message })); } context.ApplicationInstance.CompleteRequest(); } private List GetFileList(string directories, string extension) { List fileList = new List(); string docRoot = HttpContext.Current.Server .MapPath("/") .TrimEnd(Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar); foreach (string directory in directories.Split(',')) { string virtualDirectory = directory.Trim(); if (string.IsNullOrWhiteSpace(virtualDirectory)) { continue; } string fullPath = HttpContext.Current.Server.MapPath(virtualDirectory); if (!Directory.Exists(fullPath)) { continue; } string searchPattern = string.IsNullOrWhiteSpace(extension) || extension == "*" ? "*.*" : "*." + extension.TrimStart('.'); IEnumerable files = Directory.EnumerateFiles( fullPath, searchPattern, SearchOption.AllDirectories ); foreach (string file in files.Distinct(StringComparer.OrdinalIgnoreCase)) { FileInfo fileInfo = new FileInfo(file); string relativePath = file.Substring(docRoot.Length) .Replace("\\", "/"); if (!relativePath.StartsWith("/")) { relativePath = "/" + relativePath; } fileList.Add(new FileMetadata { path = relativePath, last_modified = fileInfo.LastWriteTime.ToString( "yyyy-MM-dd HH:mm:ss" ) }); } } return fileList .OrderBy(file => file.path, StringComparer.OrdinalIgnoreCase) .ToList(); } public class FileMetadata { public string path { get; set; } public string last_modified { get; set; } } public bool IsReusable { get { return false; } } }