2014-02-08 74 views
0

每當我要將文件寫入文件夾時,我都會遇到此錯誤。訪問路徑'xxxxxxxxx'被拒絕

這裏是我的代碼:發生

protected void ListAttachments(List<MessagePart> msgParts) 
    { 
     bool attachmentsFound = false; 
     StringBuilder b = new StringBuilder(); 
     b.Append("<ol>"); 
     foreach (MessagePart p in msgParts) 
     { 
      string contentType = p.Headers["Content-Type"]; 
      string contentDisposition = p.Headers["Content-Disposition"]; 
      Match m; 
      if (contentDisposition != null) 
      { 
       m = FilenameRegex.Match(contentDisposition); 
       if (m.Success) 
       { 
        attachmentsFound = true; 
        b.Append("<li><a href='Handler.ashx?fileName=" + m.Groups["filename"].Value + "'>").Append(m.Groups["filename"].Value).Append("</a></li>"); 
        Response.AppendHeader("content-disposition", "attachment; filename=" + m.Groups["filename"].Value); 
        Response.ContentType = "application/octet-stream"; 
        //Error Occurs 
        Response.TransmitFile(Server.MapPath(@"~/Files")); 
        Response.End(); 
       } 
      } 
      else if (contentType != null) 
      { 
       m = NameRegex.Match(contentType); 
       if (m.Success) 
       { 
        attachmentsFound = true; 
        b.Append("<li><a href='Handler.ashx?fileName="+m.Groups["filename"].Value+"'>").Append(m.Groups["filename"].Value).Append("</a></li>"); 
       } 
      } 
     } 
     b.Append("</ol>"); 
     if (attachmentsFound) 
      AttachmentsLiteral.Text = b.ToString(); 
     else 
      AttachementsRow.Visible = false; 
    } 

以下錯誤,如Access to the path 'F:\Gmail\Files' is denied

這是錯誤的詳細信息:

Server Error in '/Gmail' Application. 

Access to the path 'F:\Gmail\Files' is denied. 

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.UnauthorizedAccessException: Access to the path 'F:\Gmail\Files' is denied. 

ASP.NET is not authorized to access the requested resource. Consider granting access rights to the resource to the ASP.NET request identity. ASP.NET has a base process identity (typically {MACHINE}\ASPNET on IIS 5 or Network Service on IIS 6) that is used if the application is not impersonating. If the application is impersonating via <identity impersonate="true"/>, the identity will be the anonymous user (typically IUSR_MACHINENAME) or the authenticated request user. 

To grant ASP.NET access to a file, right-click the file in Explorer, choose "Properties" and select the Security tab. Click "Add" to add the appropriate user or group. Highlight the ASP.NET account, and check the boxes for the desired access. 

Source Error: 


Line 160:     Response.AppendHeader("content-disposition", "attachment; filename=" + m.Groups["filename"].Value); 
Line 161:     Response.ContentType = "application/octet-stream"; 
Line 162:     Response.TransmitFile(Server.MapPath(@"~/Files")); 
Line 163:     Response.End(); 
Line 164:    } 

Source File: f:\Gmail\DisplayPop3Email.aspx.cs Line: 162 

Stack Trace: 


[UnauthorizedAccessException: Access to the path 'F:\Gmail\Files' is denied.] 
    System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) +7712175 
    System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy) +1162 
    System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share) +66 
    System.Web.HttpResponse.TransmitFile(String filename, Int64 offset, Int64 length) +134 
    System.Web.HttpResponse.TransmitFile(String filename) +12 
    DisplayPop3Email.ListAttachments(List`1 msgParts) in f:\Gmail\DisplayPop3Email.aspx.cs:162 
    DisplayPop3Email.Page_Load(Object sender, EventArgs e) in f:\Gmail\DisplayPop3Email.aspx.cs:90 
    System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +14 
    System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +35 
    System.Web.UI.Control.OnLoad(EventArgs e) +99 
    System.Web.UI.Control.LoadRecursive() +50 
    System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +627 

請告訴我,我怎麼能修復它....

回答

1

它已經有一段時間,因爲我已經在ASP.NET工作,但我會試試這個答案。首先,錯誤非常明顯 - ASP.NET進程正在執行的用戶帳戶可能是NETWORK服務帳戶,無法訪問目錄F:\ Gmail \ Files

請參閱this link,它應該爲您提供一個關於如何前進的指針 - 而是詳細介紹了爲確保ASP.NET進程可以寫入/讀取磁盤文件而不會造成安全問題而採取的步驟。

另請參閱以下鏈接以瞭解有關What is new in ASP.NET Data access(文章適用於ASP.NET 3.0)和ASP.NET required Access Control Lists的更多信息。

希望這個步驟能夠解決您目前遇到的問題