2011-07-08 22 views
2

最近、.ashxファイルにDELETEとPUT要求を使用できない問題が発生したため、そのアクセスを許可するために適切な動詞を追加しました。今私は500内部サーバーエラーを取得しています。 httpHandlers500 .ashxファイルにアクセスしようとすると内部サーバーエラーが発生する

<handlers> 
     <remove name="OPTIONSVerbHandler" /> 
     <remove name="WebServiceHandlerFactory-Integrated" /> 
     <remove name="svc-Integrated" /> 
     <remove name="WebDAV" /> 
     <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" /> 
     <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" /> 
     <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" /> 
     <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" /> 
     <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" /> 
     <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" /> 
     <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" /> 
     <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" /> 
    <add name="ashxhandler" path="*.ashx" verb="*" type="System.Web.UI.SimpleHandlerFactory" validate="True" /> 
</handlers> 

ここにある:

<httpHandlers> 
<add path="*.ashx" verb="*" type="System.Web.UI.SimpleHandlerFactory" validate="True" /> 
    </httpHandlers> 

任意のアイデアここでハンドラのための私のweb.configはありますか?私はすでにIIS 7に行き、リクエストフィルタリングに行き、.ashxファイル拡張子を追加してそれをtrueに設定し、HTTP動詞セクションでDELETE、POST、GET、HEADER、PUTを追加しました。

編集:私は、私はそう私のweb.configファイルに動詞を追加した後、私はこれだけエラーを得た

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: 

<%@ WebHandler Language="C#" Class="jQueryUploadTest.Upload" %> 

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<FilesStatus> statuses = new List<FilesStatus>(); 
      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<FilesStatus> 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 > 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<FilesStatus> statuses) { 
      for (int i = 0; i < 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<FilesStatus> 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<FilesStatus> files = new List<FilesStatus>(); 

      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"; 
     } 
    } 
} 

エラー:ここ

は私.ashxファイルでありますDELETEとPUTリクエストをhttphandlerに呼び出すことができます

+0

ELMAHをアプリケーションにインストールすると、未処理のエラーが発生する可能性があります。 –

答えて

1

このエラーは通常、あなたのハンドラc odeがあなたのコードで処理されていない例外をスローしています。見てみましょう。

+0

コードをアップロードしてエラーが表示された場合は、エラーが発生しました。 – anthonypliu

関連する問題