500 Internal Server Error when trying to access .ashx file <p>I have recently ran into a problem that would not allow me to use DELETE and PUT requests into my .ashx file, so I added the proper verbs in order to allow that access. Now I am getting a 500 Internal Server Error. Here is my web.config for the handlers:</p> <pre><code>&lt;handlers&gt; &lt;remove name="OPTIONSVerbHandler" /&gt; &lt;remove name="WebServiceHandlerFactory-Integrated" /&gt; &lt;remove name="svc-Integrated" /&gt; &lt;remove name="WebDAV" /&gt; &lt;add name="svc-Integrated" path="*.svc" verb="*" type="System.ServiceModel.Activation.HttpHandler, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" preCondition="integratedMode" /&gt; &lt;add name="OwssvrHandler" scriptProcessor="C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\isapi\owssvr.dll" path="/_vti_bin/owssvr.dll" verb="*" modules="IsapiModule" preCondition="integratedMode" /&gt; &lt;add name="ScriptHandlerFactory" verb="*" path="*.asmx" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" /&gt; &lt;add name="ScriptHandlerFactoryAppServices" verb="*" path="*_AppService.axd" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" /&gt; &lt;add name="ScriptResource" preCondition="integratedMode" verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" /&gt; &lt;add name="JSONHandlerFactory" path="*.json" verb="*" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" resourceType="Unspecified" preCondition="integratedMode" /&gt; &lt;add name="ReportViewerWebPart" verb="*" path="Reserved.ReportViewerWebPart.axd" type="Microsoft.ReportingServices.SharePoint.UI.WebParts.WebPartHttpHandler, Microsoft.ReportingServices.SharePoint.UI.WebParts, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" /&gt; &lt;add name="ReportViewerWebControl" verb="*" path="Reserved.ReportViewerWebControl.axd" type="Microsoft.Reporting.WebForms.HttpHandler, Microsoft.ReportViewer.WebForms, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /&gt; &lt;add name="ashxhandler" path="*.ashx" verb="*" type="System.Web.UI.SimpleHandlerFactory" validate="True" /&gt; &lt;/handlers&gt; </code></pre> <p>Here is the httpHandlers:</p> <pre><code>&lt;httpHandlers&gt; &lt;add path="*.ashx" verb="*" type="System.Web.UI.SimpleHandlerFactory" validate="True" /&gt; &lt;/httpHandlers&gt; </code></pre> <p>Any ideas? I already went to IIS 7, went to Request Filtering, added .ashx file extension, set it to true and then in the HTTP Verbs section I added DELETE, POST, GET, HEADER, PUT.</p> <p>EDIT:</p> <p>Here is my .ashx file:</p> <pre><code>&lt;%@ WebHandler Language="C#" Class="jQueryUploadTest.Upload" %&gt; using System; using System.Collections.Generic; using System.IO; using System.Security.AccessControl; using System.Web; using System.Web.Script.Serialization; namespace jQueryUploadTest { public class Upload : IHttpHandler { public class FilesStatus {/* public string thumbnail_url { get; set; } public string name { get; set; } public string url { get; set; } public int size { get; set; } public string type { get; set; } public string delete_url { get; set; } public string delete_type { get; set; } public string error { get; set; } public string progress { get; set; } */ private string m_thumbnail_url; private string m_name; private string m_url; private int m_size; private string m_type; private string m_delete_url; private string m_delete_type; private string m_error; private string m_progress; public string thumbnail_url { get { return m_thumbnail_url; } set { m_thumbnail_url = value; } } public string name { get { return m_name; } set { m_name = value; } } public string url { get { return m_url; } set { m_url = value; } } public int size { get { return m_size; } set { m_size = value; } } public string type { get { return m_type; } set { m_type = value; } } public string delete_url { get { return m_delete_url; } set { m_delete_url = value; } } public string delete_type { get { return m_delete_type; } set { m_delete_type = value; } } public string error { get { return m_error; } set { m_error = value; } } public string progress { get { return m_progress; } set { m_progress = value; } } } private readonly JavaScriptSerializer js = new JavaScriptSerializer(); private string ingestPath; public bool IsReusable { get { return false; } } public void ProcessRequest (HttpContext context) { //var r = context.Response; ingestPath = @"C:\temp\ingest\"; context.Response.AddHeader("Pragma", "no-cache"); context.Response.AddHeader("Cache-Control", "private, no-cache"); HandleMethod(context); } private void HandleMethod (HttpContext context) { switch (context.Request.HttpMethod) { case "HEAD": case "GET": ServeFile(context); break; case "POST": UploadFile(context); break; case "DELETE": DeleteFile(context); break; default: context.Response.ClearHeaders(); context.Response.StatusCode = 405; break; } } private void DeleteFile (HttpContext context) { string filePath = ingestPath + context.Request["f"]; if (File.Exists(filePath)) { File.Delete(filePath); } } private void UploadFile (HttpContext context) { List&lt;FilesStatus&gt; statuses = new List&lt;FilesStatus&gt;(); System.Collections.Specialized.NameValueCollection headers = context.Request.Headers; if (string.IsNullOrEmpty(headers["X-File-Name"])) { UploadWholeFile(context, statuses); } else { UploadPartialFile(headers["X-File-Name"], context, statuses); } WriteJsonIframeSafe(context, statuses); } private void UploadPartialFile (string fileName, HttpContext context, List&lt;FilesStatus&gt; statuses) { if (context.Request.Files.Count != 1) throw new HttpRequestValidationException("Attempt to upload chunked file containing more than one fragment per request"); Stream inputStream = context.Request.Files[0].InputStream; string fullName = ingestPath + Path.GetFileName(fileName); using (FileStream fs = new FileStream(fullName, FileMode.Append, FileAccess.Write)) { byte[] buffer = new byte[1024]; int l = inputStream.Read(buffer, 0, 1024); while (l &gt; 0) { fs.Write(buffer,0,l); l = inputStream.Read(buffer, 0, 1024); } fs.Flush(); fs.Close(); } FilesStatus MyFileStatus = new FilesStatus(); MyFileStatus.thumbnail_url = "Thumbnail.ashx?f=" + fileName; MyFileStatus.url = "Upload.ashx?f=" + fileName; MyFileStatus.name = fileName; MyFileStatus.size = (int)(new FileInfo(fullName)).Length; MyFileStatus.type = "image/png"; MyFileStatus.delete_url = "Upload.ashx?f=" + fileName; MyFileStatus.delete_type = "DELETE"; MyFileStatus.progress = "1.0"; /* { thumbnail_url = "Thumbnail.ashx?f=" + fileName, url = "Upload.ashx?f=" + fileName, name = fileName, size = (int)(new FileInfo(fullName)).Length, type = "image/png", delete_url = "Upload.ashx?f=" + fileName, delete_type = "DELETE", progress = "1.0" }; */ statuses.Add(MyFileStatus); } private void UploadWholeFile(HttpContext context, List&lt;FilesStatus&gt; statuses) { for (int i = 0; i &lt; context.Request.Files.Count; i++) { HttpPostedFile file = context.Request.Files[i]; file.SaveAs(ingestPath + Path.GetFileName(file.FileName)); string fileName = Path.GetFileName(file.FileName); FilesStatus MyFileStatus = new FilesStatus(); MyFileStatus.thumbnail_url = "Thumbnail.ashx?f=" + fileName; MyFileStatus.url = "Upload.ashx?f=" + fileName; MyFileStatus.name = fileName; MyFileStatus.size = file.ContentLength; MyFileStatus.type = "image/png"; MyFileStatus.delete_url = "Upload.ashx?f=" + fileName; MyFileStatus.delete_type = "DELETE"; MyFileStatus.progress = "1.0"; statuses.Add(MyFileStatus); } } private void WriteJsonIframeSafe(HttpContext context, List&lt;FilesStatus&gt; statuses) { context.Response.AddHeader("Vary", "Accept"); try { if (context.Request["HTTP_ACCEPT"].Contains("application/json")) { context.Response.ContentType = "application/json"; } else { context.Response.ContentType = "text/plain"; } } catch { context.Response.ContentType = "text/plain"; } string jsonObj = js.Serialize(statuses.ToArray()); context.Response.Write(jsonObj); } private void ServeFile (HttpContext context) { if (string.IsNullOrEmpty(context.Request["f"])) ListCurrentFiles(context); else DeliverFile(context); } private void DeliverFile (HttpContext context) { string filePath = ingestPath + context.Request["f"]; if (File.Exists(filePath)) { context.Response.ContentType = "application/octet-stream"; context.Response.WriteFile(filePath); context.Response.AddHeader("Content-Disposition", "attachment, filename=\"" + context.Request["f"] + "\""); } else { context.Response.StatusCode = 404; } } private void ListCurrentFiles (HttpContext context) { List&lt;FilesStatus&gt; files = new List&lt;FilesStatus&gt;(); string[] names = Directory.GetFiles(@"C:\temp\ingest", "*", SearchOption.TopDirectoryOnly); foreach (string name in names) { FileInfo f = new FileInfo(name); FilesStatus MyFileStatus = new FilesStatus(); MyFileStatus.thumbnail_url = "Thumbnail.ashx?f=" + f.Name; MyFileStatus.url = "Upload.ashx?f=" + f.Name; MyFileStatus.name = f.Name; MyFileStatus.size = (int)f.Length; MyFileStatus.type = "image/png"; MyFileStatus.delete_url = "Upload.ashx?f=" + f.Name; MyFileStatus.delete_type = "DELETE"; files.Add(MyFileStatus); /*files.Add(new FilesStatus { thumbnail_url = "Thumbnail.ashx?f=" + f.Name, url = "Upload.ashx?f=" + f.Name, name = f.Name, size = (int)f.Length, type = "image/png", delete_url = "Upload.ashx?f=" + f.Name, delete_type = "DELETE" });*/ } context.Response.AddHeader("Content-Disposition", "inline, filename=\"files.json\""); string jsonObj = js.Serialize(files.ToArray()); context.Response.Write(jsonObj); context.Response.ContentType = "application/json"; } } } </code></pre> <p>The error:</p> <pre><code>XML Parsing Error: no element found Location: http://nbcddmsps01:87/_layouts/IrvineCompany.SharePoint.CLM/aspx/Upload.ashx?f=test.txt Line Number 1, Column 1: </code></pre> <p>I ONLY got this error AFTER i added verbs to my web.config so I could call DELETE and PUT requests into the httphandler</p>